在java项目中添加/修改注释

时间:2011-09-04 14:28:19

标签: java android annotations runtime

我们有一个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建议in this thread(即Java字节码操作方法),但问题是这需要在Android客户端上运行,因此它不适合我。在这一点上,我没有想法。

如果有人能以任何方式提供帮助,我将不胜感激。也许我错过了一些东西,或者我想要做的不是正确的方法。无论如何,我现在需要一些指导才能继续。

非常感谢。

2 个答案:

答案 0 :(得分:4)

我更多地研究了这个,作为总结,这是我发现的:

主要是由于JAXB不存在于Android(以及其他原因),我们切换到JSON并开始使用Jackson作为实现。这种变化的一个好处是能够使用杰克逊所谓的“混合注释”,这正是我所寻找的。

以下是解释更多内容的链接:http://www.cowtowncoder.com/blog/archives/2009/08/entry_305.html

答案 1 :(得分:0)

在运行时没有黑客攻击.class字节码,这是不可能做到的。如果你真的想在运行时动态地改变库类的字节码,你可以使用Javassist,但从更大的角度来看,这可能最终会爆炸。

我建议你只是注释库并重新编译它的代码库。如果不是,您仍然可以通过继承和注释将库类/接口包装在您自己的类/接口中。无论哪种方式,我认为在代码中注释比通过运行时字节码黑客更好。添加了奖励,IDE会看到源代码中的注释,使IDE能够更好地为您提供帮助。