「java扩展方法」java有扩展方法吗
今天给各位分享java扩展方法的知识,其中也会对java有扩展方法吗进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
java中关于扩展抽象的问题!!!
简单来说,student extends person
student类继承了抽象类person,这时候有两中情况可以选择
第一:不实现person抽象类中的抽象方法(getDescription),那么student类就必须声明成抽象的,如下:
abstract class student {
……
public abstract String getDescription();
……
}
第二:实现person抽象类中的抽象方法(getDescription),student类就必须有方法体,如下:
class student {
……
public abstract String getDescription() {
System.out.println("我实现了父类中的抽象方法!");
}
……
}
在student类中定义了getDescription方法不是覆盖而是实现了!
有什么疑惑的地方可以百度HI我!
java 添加方法
CGLib(Code Generation Library)是一个强大的,高性能,高质量的字节码操作类库,它可以在运行期扩展Java类与实现Java接口,Spring、Hibernate等很多著名的框架都使用了它。
使用cglib动态为Java类添加方法
public class CGLibExample {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
// 定义一个参数是字符串类型的setCreatedAt方法
InterfaceMaker im = new InterfaceMaker();
im.add(new Signature("setCreatedAt", Type.VOID_TYPE,
new Type[] { Type.getType(String.class) }), null);
Class myInterface = im.create();
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(ExampleBean.class);
enhancer.setInterfaces(new Class[] { myInterface });
enhancer.setCallback(new MethodInterceptor() {
public Object intercept(Object obj, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
ExampleBean bean = (ExampleBean) obj;
// 调用字符串类型的setCreatedAt方法时,转换成Date型后调用Setter
if (method.getName().startsWith("setCreatedAt")
args[0] != null args[0] instanceof String) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Date date = null;
try {
date = sdf.parse((String) args[0]);
} catch (final Exception e) { /* nop */ }
bean.setCreatedAt(date);
return null;
}
return proxy.invokeSuper(obj, args);
}
});
// 生成一个Bean
ExampleBean bean = (ExampleBean) enhancer.create();
bean.setId(999);
try {
Method method = bean.getClass().getMethod("setCreatedAt", new Class[] {String.class});
method.invoke(bean, new Object[]{"20100531"});
} catch (final Exception e) {
e.printStackTrace();
}
System.out.printf("id : [%d] createdAt : [%s]\n", bean.getId(), bean.getCreatedAt());
}
}
class ExampleBean implements Serializable {
private static final long serialVersionUID = -8121418052209958014L;
private int id;
private Date createdAt;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
}
java 扩展一个类的功能除了继承还有啥方法
如果说要扩展一个类的功能,不一定是包装着模式,接口或者任何一个设计模式都能做到扩展。 若是说到这几者的区别: 继承/实现:继承父类或实现接口,在其规范上,自定义自己的功能实现 装饰模式:以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案; 代理模式:给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用
Java创建对象的几种方法及扩展
public class InstanceWay {
public static void main(String[] args) {
normal();
special();
}
private static void normal() {
Person p = new Person();
p.setId(1);
System.out.println(p);
}
private static void special() {
try {
// person的无参构造方法不能为private
Class? clazz = Person.class;
Person person = (Person) clazz.newInstance();
person.setId(2);
System.out.println(person);
} catch (Exception e) {
e.printStackTrace();
}
}
static class Person {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "Person [id=" + id + "]";
}
}
}
测试结果
Person [id=1]
Person [id=2]
java扩展方法的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java有扩展方法吗、java扩展方法的信息别忘了在本站进行查找喔。
发布于:2022-11-27,除非注明,否则均为
原创文章,转载请注明出处。