在Java中,仅通过父类实例是否可能动态创建匿名子类实例?

3
在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) 不仅要创建子类实例,还要将原型实例重新分配给新创建的实例(代码中的第二个断言)。

(3) 将子类引入到某些特定接口中。

我怀疑这是可能的,但我对Java还是初学者,所以……


1个回答

3
如果你是Java的新手,你必须问自己为什么需要这个功能。如果你能描述清楚你要解决的问题,肯定会有更好的解决方案存在。
除了重写字节码之外,你唯一的选择就是使用动态代理,因为它们能够在运行时实现接口。但是按照你的建议使用它们并没有多大意义。
不仅创建子类实例,还要将原型实例重新分配给新创建的实例。
Java不采用原型继承。

在这种情况下,我认为“原型实例”是指作为introduce()的第一个参数发送的实例,而不是某种原型继承意义上的实例。 - johusman
如果没有其他答案,我猜我的问题的三个部分都无法实现... - Andrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接