我想知道是否可以通过注释处理器生成一个类,它将是要编译的类的内部类。
例如,在编译类A$Foo
时,生成类YAML -
libraries:
- name: MySQLdb
version: "1.2.4"
。我想知道是否有一个可以使用的技巧。我觉得有可能生成一些源代码,这些源代码将在与内部类相同的字节代码中编译。并且,在编译/运行时,JVM将它用于内部类,并允许访问外部类私有字段。
这个问题背后的想法,虽然它可能看起来或多或少是技术性的,但它不是一个noobie问题,是能够使用私有可见性修饰符来注释字段,如Dagger,ButterKnife等。私有修饰符允许更容易检测未使用的字段,而包私有保护隐藏它们。
或者是否有任何解决方法,以任何方式来充分利用这两个词?
答案 0 :(得分:3)
鉴于您的用例,没有。
内部类是一个普通的Java类,它位于不同的.class文件中。编译时,隐藏的构造函数参数将添加到内部类构造函数中。通过在外部类中添加隐藏的访问器方法,可以访问外部类中的私有字段。所有这些都发生在编译时。
JVM与此无关。如果生成一个“看起来像另一个类的内部类”的类,则不会使外部类字段可访问。
答案 1 :(得分:-2)
私有可见性实际上只是编译器的一个提示。在运行时访问这些字段没有问题(就像我在我的小依赖注入器中那样:https://github.com/ko5tik/andject)
Android上的非静态内部类通常是一个坏主意,因为它曾经有性能损失。
在编译时,您可以使用像xdoclet这样的源代码生成工具(虽然它在几年前已经过时,但仍偶尔使用)并在编译之前提前生成所需的所有源代码。