在java项目中添加/修改注释
我们有一个Java代码库,我们打算在项目中使用它们。 其中一些项目需要在此库中的Java对象中添加注释(即在一个项目中,这些对象将在JAX-RS servlet实现中使用,因此需要使用JAXB,JSON等注释进行注释)。 我遇到的问题是我无法弄清楚如何在不更改原始库的情况下添加这些注释。
考虑这个例子:
public class MyClass { private String field1; private int field2; }
在某些项目中,我希望课程表现得像是
public class MyClass { @Annotation1 private String field1; @Annotation2 private int field2; }
最初我想过使用单独注释的接口或派生类但无法弄清楚如何做(或者是否可能)。 我还发现了这个线程中的Javassist建议(即Java字节码操作方法),但问题是这需要在Android客户端上工作,所以它不适合我。 在这一点上,我没有想法。
如果有人能以任何方式提供帮助,我将不胜感激。 也许我错过了一些东西,或者我想要做的不是正确的方法。 无论如何,我现在需要一些指导才能继续。
首先十分感谢。
我更多地研究了这个,作为总结,这是我发现的:
- Java语言不允许在运行时更改注释。
- 可以使用Javassist来修改java字节码,但它不适用于像Android这样的平台。
- 可以使用ASM,但这涉及到处理Java程序集(例如: http : //community.jboss.org/thread/150002 )。
主要是由于JAXB不存在于Android(以及其他原因),我们切换到JSON并开始使用Jackson作为实现。 这种变化的一个好处是能够使用jackson所谓的“混合注释”,这正是我所寻求的。
以下是更多解释的链接: http : //www.cowtowncoder.com/blog/archives/2009/08/entry_305.html
如果没有在运行时攻击.class字节码,则无法完成。 如果你真的想在运行时动态地改变库类的字节码,你可以使用Javassist,但从更大的角度来看,这可能会导致严重的爆炸。
我建议你只是注释库并重新编译它的代码库。 如果不是,您仍然可以通过inheritance和注释将库类/接口包装在您自己的类/接口中。 无论哪种方式,我认为在代码中注释比通过运行时字节码黑客更好。 添加奖励,IDE会看到源代码中的注释,使IDE能够更好地为您提供帮助。
- AbstractSecurityWebApplicationInitializer与AbstractAnnotationConfigDispatcherServletInitializer
- 如何全局设置RenderingHints?
- 片段和baseadapter之间的Android通信
- EditText失去了对RecyclerView中Scroll的关注
- 如何更新Android应用程序中的SSL证书?
- Javamail中的FolderClosedexception
- 使用DownloadManager类从WebView下载文件
- 将RecyclerView.OnItemTouchListener中的MotionEvent传递给GestureDetectorCompat
- res / values / strings.xml中的字符串数组
- 更改包名称android清单会导致问题JNI
- Java / Android ArrayList在不同的Activity中