Java中的合成类

问题

什么是Java中的合成类?为什么要使用它?我怎么用呢?


#1 热门回答(102 赞)

Java具有在运行时创建类的能力。这些类称为Synthetic Classes或Dynamic Proxies。

有关更多信息,请参见http://java.sun.com/j2se/1.5.0/docs/guide/reflection/proxy.html

其他开源库,如CGLIBASM也允许你生成合成类,并且比JRE提供的库更强大。

合成类由AOP(面向方面​​编程)库(如Spring AOP和AspectJ)以及ORM库(如Hibernate)使用。


#2 热门回答(52 赞)

好吧,我找到了谷歌第一个问题的答案:

如果类由编译器生成,则可以将其标记为合成类,也就是说,它不会出现在源代码中。

这只是一个基本的定义,但我在一个论坛帖子中找到它并且没有解释。还在寻找更好的......


#3 热门回答(13 赞)

例如,当你有一个switch语句时,java会创建一个以$开头的变量。如果你想看一个这样的例子,请查看其中包含switch语句的类的java反射。当你在类中的任何位置至少有一个switch语句时,你将看到这些变量。

要回答你的问题,我不相信你能够访问合成类(除了反射)。

如果你正在分析一个你不了解的类(通过反射)并且需要知道关于该类的非常具体和低级的事情,你最终可能会使用与合成类有关的Java反射方法。这里唯一的"使用"是获取有关该类的更多信息,以便在你的代码中正确使用它。

(如果你这样做,你可能正在构建一些其他开发人员可以使用的框架。)

否则,如果你没有使用反射,我所知道的合成类没有实际用途。