对不起,我真的不知道如何为这个问题做标题;也许我不知道我想做的事情有一个名字,但我可以用一些代码来解释它:
猜猜你有一个类,不幸的是既没有复制构造函数也没有公共静态复制方法。
class A
{
private int i; // <- private, cant access
String x; // <- even worse: cant access unless in same pkg!
/* … other stuff, ctor, etc. … */
public A clone()
{
A a = new A();
a.i = i;
a.x = x;
return x;
}
}
进一步猜测,有一些函数返回该类的对象:
public static A someFn(x,y,z);
现在的问题是:我想从该类派生以添加一些功能。不幸的是,我在 java 中既没有 sizeof,也没有 cc 或静态复制方法。
所以当我做一个
class B extends A
{
protected w;
public B clone()
{
/* as usual */
}
}
然后我可以克隆我的 B 并获得一个新的,但是如何将返回的 A 从 someFn() 转换为 B。无论如何在 java 中做与切片相反的操作?如果我克隆它,它仍然是一个 A,我不能逐个字段地复制它。这在 C++ 中很简单,但是如何在 Java 中做到这一点?