java 值对象_java-自动生成值对象

给定一个或多个接口,生成类实现的最佳方法是什么?

interface Vehicle

{

Engine getEngine();

}

@Generated

class Car implements Vehicle

{

private final Engine engine;

public Car(Engine engine)

{

this.engine = engine;

}

public Engine getEngine()

{

return engine;

}

// generated implementation of equals, hashCode, toString,

}

类变量应从接口的getter方法派生.理想情况下,将处理接口中的协变返回类型.该实现应通过使用私有最终变量和构造函数实例化来实现不变性. equals,hashCode和toString方法应生成.

解决方法:

更干净的方法是使用CGLIB在运行时动态生成类.显然,您无法浏览源文件.

如果需要源文件,可以尝试codemodel并执行以下操作:

JCodeModel cm = new JCodeModel();

x = cm._class("foo.bar.Car");

x.field(Engine.class, "engine");

for (PropertyDescriptor pd: Introspector.

getBeanInfo(Vehicle.class).getPropertyDescriptors()) {

g = x.method(JMod.PUBLIC, cm.VOID, pd.getReaderMethod().getName());

g.body()...

s = x.method(JMod.PUBLIC, cm.VOID, "set" + pd.getName());

s.body()...

}

hc = x.method(JMod.PUBLIC, cm.VOID, "hashCode"));

hc.body()...

cm.build(new File("target/generated-sources"));

或按照之前的建议,使用IDE(在Eclipse中:菜单“源”,“生成hashcode()和equals()…”,即)

标签:compile-time,annotations,code-generation,runtime,java

来源: https://codeday.me/bug/20191024/1921265.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值