在运行时将新方法和属性注入类中

Che*_*eng 7 java

有没有什么办法可以在运行时将新方法和属性注入到类中.

http://nurkiewicz.blogspot.com/2009/09/injecting-methods-at-runtime-to-java.html声明我们可以通过使用Groovy来做到这一点.

只使用Java可以吗?

Ste*_*n C 10

只使用Java可以吗?

简单的答案是强调"你不想那样做!".

这在技术上是可行的,但并非没有采用极其复杂,昂贵和脆弱的技巧,如字节码修改1.即便如此,您还必须依靠动态加载来访问修改后的类型和(可能)反射以利用其新成员.简而言之,你会为自己创造很多痛苦,几乎没有任何好处.

Java是一种静态类型语言,添加/修改类类型签名可能会破坏类的静态类型.


1 - AspectJ等允许您向类中注入其他行为,但它可能不是您所追求的"运行时"注入.当然,注入的方法不能用于静态编译的代码来调用.