尝试找到一种方法来包装对象,该对象是基于某些具有大量 getter 和 setter 的模型自动生成的。例如:
class ObjectToWrap {
public int getIntA();
public int getIntB();
... // Tons of other getters
}
我have创建一个包装器来包装这个对象,并使用一些注释为我从
ObjectToWrap
生成方法。代码如下所示:
class Wrapper {
private ObjectToWrap obj;
public int getIntA() {
return obj.getIntA();
}
public int getIntB() {
return obj.getIntB();
}
... // Tons of other getters
}
有注释可以做到这一点吗?我只是不想让代码看起来很长。
看看 Project Lombok,它有一个 @Delegate 注释,它完全可以满足您的需求。
我认为你能够做到这一点:
import lombok.Delegate;
class Wrapper {
//the types field in the annotation says
//to only auto generate deleagate methods
//for only the public methods in the ObjectToWrap class
//and not any parent classes if ObjectToWrap extended something
@Delegate(types = ObjectToWrap.class)
private ObjectToWrap obj;
}
如果您使用具有依赖管理功能的 maven 构建基础设施,您可能有一个依赖子项目,它按原样收集生成的源(而不是代码)。然后,另一个子项目可以从中生成真正的源代码(源代码转换)作为zip,然后可以由maven在主项目中导入作为预编译目标。
在此基础上,您可以使用动态代理类,甚至直接生成的类。
唯一的其他选择是使用 java scripting API,并使用 JavaScript 等进行业务。失去java的类型安全性,降低软件质量。
不幸的是,混合使用另一种 JVM 语言的替代方案我认为不具有生产力。非常漂亮和强大的 Scala 仍然太狂野/复杂/棘手。