gpt4 book ai didi

Java : Two similar classes, 一个不可变的 - 在它们之间共享代码

转载 作者:行者123 更新时间:2023-11-29 06:44:03 26 4
gpt4 key购买 nike

假设我有两个类(class)。两者具有相同的成员字段(包括相同的名称),但一个类的成员字段被声明为 final(不可变),而另一个则不是。大多数成员方法都适用于这两个类。

我如何才能与另一个类共享不可变类的成员方法(就像通过继承或其他方式一样),而不必将整个方法复制到另一个类。我想没有这样的方法,但我想我会先问问。否则我将在不同的命名空间中声明它们并给它们相同的类名。应该注意的是,并非所有不可变类方法都适用于可变类方法。

public class ImmutableDoubleLine {
public final DoublePoint origin;
public final DoublePoint endPoint;

// ...

public double getLength() {
return origin.calcDistance(endPoint);
}
}

public class MutableDoubleLine {
public DoublePoint origin;
public DoublePoint endPoint;

// ...

// same code as immutable class
public double getLength() {
return origin.calcDistance(endPoint);
}
}

最佳答案

首先,这是非常重要的。

除非类 DoublePoint 是内部不可变的,并且它的所有实例变量都是内部不可变的,否则您对 final DoublePoint origin 语句所做的就是使引用originendpoint,它们不能更改为指向不同的实例,您没有 ImmutableDoubleLine 不可变。

我提到这个是因为您没有显示 DoublePoint 的代码。

其次,对于您的实际问题,使用 Interface 并让两个类都实现它:

public interface DoubleLine
{
public double getLength();
}

我会尽量让一切都变得不可变,这样调试更容易,并发性也更容易。

关于Java : Two similar classes, 一个不可变的 - 在它们之间共享代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8069187/

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