标签:java annotations getter-setter code-generation
我正在考虑写作的方法
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没有属性 – 克服它.
标签:java,annotations,getter-setter,code-generation 来源: https://codeday.me/bug/20190712/1440984.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。