【问题标题】:Java auto generate methods for propertiesJava 自动生成属性的方法
【发布时间】:2020-12-20 05:24:28
【问题描述】:

我正在使用 Java 开发一个项目,对于一个类中的每个属性,我有以下方法:

private MyType property;

public MyType getProperty() {
    return this.property == null ? null : this.property.value;
}

public MyType getPropertyElement() {
    if (this.property == null)
        this.property = new MyType();
    return this.property.value;
}

public bool hasProperty() {
    return this.property != null;
}

public void setProperty(MyType property) {
    this.property = property;
}

此外,如果MyType 是一个列表,那么还有一个方法addProperty

在 python 中,我无法通过使用元类或装饰我的类来实现此功能。 在 C++ 中,我可以使用宏来实现这种行为。在这两种情况下,我都会在“类编译”期间向类添加方法。

在Java中是否存在类似于其中之一的机制?是否有另一种模式可以实现这一点?

我看到了一个名为lombok 的库,它使用注释来生成代码。自己写这样的东西是不是很简单

【问题讨论】:

  • 在 Python 中你不能

标签: java macros decorator auto-generate


【解决方案1】:

基本上,Lombok 采用的方法是 Java 中唯一可能实现您想要实现的方法。而自己编写这样的东西是简单还是容易,取决于您编写 Java 注释处理器的经验——在您多次这样做之后,您肯定会说这很容易……

但是 Java 注释处理器仍然存在一些限制,这使得实现目标变得更加复杂。因此,首先,注解处理器不能修改 Java 源代码,即使是在运行中也不能(至少对于 Java 8 到 Java 11,没有检查更新的版本)。它只能生成新的源文件,即扩展/增强现有源文件的新类(或接口)。

所以建议先尝试一下 Lombok,看看它是否足够接近您的需求,然后再自行尝试……

【讨论】:

    【解决方案2】:

    我自己写这样的东西很简单吗?

    不,绝对不是。

    我不建议在已经存在好的自行车的情况下重新发明一辆自行车。

    我也不明白你为什么不想使用Lombok 来摆脱大量样板代码(getter、setter、构造函数、toString() 等)

    您只需要为您的 IDE 和 Lombok jar(或依赖项)提供一些相应的插件。

    【讨论】: