「java扩展方法」java有扩展方法吗

博主:adminadmin 2022-11-27 11:50:06 49

今天给各位分享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扩展方法的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-27,除非注明,否则均为首码项目网原创文章,转载请注明出处。