gpt4 book ai didi

java: "downcasting"到新对象/切片相反

转载 作者:行者123 更新时间:2023-12-01 17:36:52 26 4
gpt4 key购买 nike

抱歉,我真的不知道如何为这个问题制作标题;也许我不知道我想做的事情有一个名称,但我可以用一些代码来解释它:

不幸的是,猜测您有一个类既没有复制构造函数也没有公共(public)静态复制方法。

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 并获得一个新的,但是我如何将 someFn() 返回的 A 转换为 B。有没有办法与 java 中的切片相反?如果我克隆它,它仍然是一个 A,而且我无法逐个字段复制它。这在 C++ 中很简单,但在 Java 中如何做到这一点?

最佳答案

要么改变 A 和 B 的设计,以便能够将 A 转变为 B(如果这甚至有意义的话:如何将狗转变为达尔马提亚狗?),或者使用组合而不是继承:

public class B {
private A a;
private int w;

public B(A a, int w) {
this.a = a;
this.w = w;
}

public int foo() {
return a.foo();
}

// ...
}

关于java: "downcasting"到新对象/切片相反,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5412715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com