[英](Java) Creating methods for new object created via reflection?
我的类中有抽象方法,该类中的抽象方法需要使用我的项目的SEPARATE项目中的外国类来实现。
-A的所有类instanceof最初都是使用反射生成的-
因此,无论如何,假设A类是抽象的,而B类(非抽象)扩展了A
B在类A中具有所有未实现的方法,因为B在我的工作空间中,所以我知道要添加这些方法。
C还扩展了A,但是C在A中仅具有抽象方法的一个子集。但是,C不在我的工作空间中。
因此,对于A中C NOT中的每个抽象方法,我需要找到某种方法为A添加方法,如下所示:
(每种方法)
public <corresponding return type> <missingMethodName>() { return null; }
这可能吗?
PS:请假设我要么必须完全重写我的代码才能与我无法控制的对象同步,要么要实现一种我上面提到的解决方案。
不,除非我对您的阅读有误,否则您的要求实际上并没有多大意义。
如果您想注入方法
public <corresponding return type> <missingMethodName>() { super.<missingMethodName>(); }
到C中,这扩展了A(未实现该方法),它究竟会做什么?
如果要在A中提供默认实现,那很好,并且不会影响C。如果将抽象方法添加到A中,则C必须实现它们,将其标记为抽象,否则将无法编译(或引发序列化) ,或一些怪异的错误),如果您使用由旧A编译的C。
您永远不需要这样做,因为任何具有super
实现的实例方法都可以在子类实例上调用。
您可以使用字节码添加这些方法,但是它们唯一的区别是更改getDefinedMethods()的列表。 但是,它不会改变类的对象的行为。
它的安静困难,但是您可以使用Javassist做到
Javassist(Java编程助手)是一个Java库,提供了一种操作应用程序的Java字节码的方法。 1从这个意义上讲,Javassist提供了对结构反射的支持,即在运行时更改类的实现的能力。 字节码操作是在加载时通过提供的类加载器执行的。 http://en.wikipedia.org/wiki/Javassist
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.