在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的新手,所以......
答案 0 :(得分:3)
如果您是java新手,您必须问自己为什么需要此功能。如果你只描述你想要解决的问题,肯定会有更好的解决方案。
您拥有的唯一方法(除了重写字节码)是使用Dynamic Proxies,因为它们能够在运行时实现接口。但是以你建议的方式使用它们并不会真正有用。
不仅创建子类实例,还将原型实例重新分配给新创建的实例
Java不使用原型继承。