在Java中,只有父类的实例才可以动态创建匿名子类实例吗?

时间:2011-02-20 17:38:27

标签: java reflection

在Java中,是否可以仅给定父类的实例动态创建匿名子类实例?

我试图实现的模式代码如下所示:

public interface IStringCarier { public String getStr(); }

public static IStringCarier introduce(Object victim, final String str) {
   // question subject
}

public class AAA { }

public static void main() {
    AAA aaa = new AAA();

    assert !(aaa instanceof IStringCarier);

    IStringCarier bbb = introduce(aaa, "HelloWorld");

    assert aaa == bbb;
    assert "HelloWorld".equals(bbb.getStr());
}

实际上还有2个关于此代码的要求问题:

(2)不仅创建子类实例,还将原型实例重新分配给新创建的实例(代码中的第二个断言)。

(3)将子类引入某个特定的接口。

我怀疑这是可能的,但我是Java的新手,所以......

1 个答案:

答案 0 :(得分:3)

如果您是java新手,您必须问自己为什么需要此功能。如果你只描述你想要解决的问题,肯定会有更好的解决方案。

您拥有的唯一方法(除了重写字节码)是使用Dynamic Proxies,因为它们能够在运行时实现接口。但是以你建议的方式使用它们并不会真正有用。

  

不仅创建子类实例,还将原型实例重新分配给新创建的实例

Java不使用原型继承。