gpt4 book ai didi

java - 扩展类并使变量可变

转载 作者:行者123 更新时间:2023-12-02 01:01:27 27 4
gpt4 key购买 nike

我有这个 vector 类:

public class Vector {
public double x;
public double y;

public double getLength() {
return Math.sqrt(x*x+y*y);
}
}

大多数时候我只是想按原样使用它,但在某些情况下我想使用它的 volatile 版本,所以我尝试扩展它:

public class VectorVolatile extends Vector {
public volatile double x;
public volatile double y;
}

其背后的想法是将原始类中的所有函数也用于 volatile 类。但这行不通。变量 (x, y) 将无法正确替换。

我想使用 volatile,因为我有 2 个线程。一个线程读取并写入该对象,另一个线程仅读取。我想使用 volatile 而不是同步,因为我认为它更快,并且由于一个线程仅读取,因此将变量设置为 volatile 应该足够了。

有没有一种方法可以从原始类中获取所有函数,而无需复制和粘贴?我不应该使用 volatile 吗?

最佳答案

通过扩展,您没有更改 Vector 类成员的属性。

当您扩展类并以相同名称声明新成员时,它将隐藏旧成员。也就是说,在类 VectorVolatile 中,this.xsuper.x 只是两个不同的成员。一个是不稳定的,另一个则不是。

https://dzone.com/articles/variable-shadowing-and-hiding-in-java

(恕我直言,通过扩展非线程安全类使其成为线程安全并不是一个好主意)。

更简洁的方法可能是为提供 x 和 y 的类定义一个接口(interface),让方法在该接口(interface)上进行操作,然后为提供 x 和 y 的类提供不同的实现。

关于java - 扩展类并使变量可变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60588766/

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