繁体   English   中英

(Java)为通过反射创建的新对象创建方法吗?

[英](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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM