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

时间:2011-10-05 19:45:33

标签: java class overloading

我在类中有抽象方法,需要在使用我的项目的SEPARATE项目中由外部类实现。

- 所有类的实例A最初都是使用反射生成的 -

所以无论如何,说A类是抽象的,B类(非抽象)扩展A

B在A类中有所有未实现的方法,因为B在我的工作区中,所以我知道要添加这些方法。

C也扩展了A,但C只有A. C中的抽象方法的子集,但是,它不在我的工作区中。

因此,对于A中的C NOT中的每个抽象方法,我需要找到一些方法来为A添加方法:

(对于每种方法)

public <corresponding return type> <missingMethodName>() { return null; }

这可能吗?

P.S。请假设我要么完全重写我的代码以与我无法控制的对象同步,要么实现类似我上面提到的解决方案。

3 个答案:

答案 0 :(得分:0)

不,除非我读错了你,你所要求的并没有多大意义。

如果你想注入方法

public <corresponding return type> <missingMethodName>() { super.<missingMethodName>(); }

进入C,它扩展了A,没有实现该方法,它究竟会做什么?

如果你想在A中提供一个默认实现,那很好,它不会影响C.如果你将抽象方法添加到A中,C必须实现它们,将它自己标记为抽象,否则它将不会编译(如果您使用较旧的A编译的C运行,则抛出序列化或一些奇怪的错误。

答案 1 :(得分:0)

您永远不需要这样做,因为可以在子类实例上调用任何具有super实现的实例方法。

您可以使用字节代码添加这些方法,但它们唯一的区别是更改getDefinedMethods()列表。但是它不会改变类的对象的行为。

答案 2 :(得分:0)

它很安静,但你可以用Javassist

来做
  

Javassist(Java编程助手)是一个Java库,提供了一种操作应用程序的Java字节码的方法。1在这个意义上,Javassist提供了对结构反射的支持,即改变a的实现的能力。在运行时上课。   字节码操作是在加载时通​​过提供的类加载器执行的。   http://en.wikipedia.org/wiki/Javassist

相关问题