用Java生成getter / setter(再次)

我正在考虑写作的方法


class MyClass {
  @Get
  @Set
  protected int aValue;
}

然后,自动为类生成get_aValue()和set_AValue()方法.

我发现了这些可能性:

1a)在编译时.使用注释处理器分别处理MyClass.java,然后编写一个新的MyClass.java,最后使用后者(用原文替换)与.java的其余部分

1b)在编译时.使用注释处理器生成一个MyClassGenerated.java文件,其中包含一个新类(使用get / set方法),这个类是原始MyClass的子类.

2)在运行时.使用java.lang.instrument和外部工具(如BCEL)在MyClass.class中编写新代码.

嗯,问题是:考虑到我尽可能不想使用第三方库(如lombok项目或BCEL)

a)我错过了其他方法吗?

b)您会使用哪种方法?

我想我会用1a)因为

1b)不干净(程序的其余部分应该使用MyClassGeneradted而不是原始的MyClass,尽管它可能仅仅是名称问题)

2)真的很难(对我来说,至少).

解决方法

你错过了一些东西,如果你想沿着这条路走下去,我会说这是最好的方法:

1c)在编译时.正常编译类,然后使用APT注释处理器修改.class文件(而不是源文件),以将适当的get和set方法添加到字节码.

通过这种方式,您的源代码保持原始状态,您不必使用临时文件,并且实际编译的类正如您所希望的那样.

不过,这是用大锤打开坚果.它是可行的,但是现在你的代码并不是严格意义上的Java,如果有人接受并运行javac,它们就会得到一个没有getter和setter的类.这将使调试变得困难,因为所有的行号都会搞砸,除非你非常确定你用注释处理器完成了正确的操作,否则你甚至无法看到getter和setter的源代码.纠正错误.静态分析工具会告诉您该属性从未使用过,等等.

我是普遍的共识 – 只需使用每个IDE为您提供的方法在源文件中生成它们.这比编写注释几乎没有时间,并且每个开发人员和工具都能理解这一点. Java没有属性 – 克服它.

相关文章

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
今天犯了个错:“接口变动,伤筋动骨,除非你确定只有你一个...
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:...
本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程...