gpt4 book ai didi

java - 如何在不使用 private 的情况下强制使用 setter 方法? (公共(public)用于读取,私有(private)用于写入)

转载 作者:行者123 更新时间:2023-12-01 17:25:23 24 4
gpt4 key购买 nike

我有一个 Circle 类类型的对象,我有一个成员“r”来存储半径。现在,因为我经常使用这些对象,所以我不想将半径设为私有(private),因为其他类必须使用 getR() 方法,这会使代码难以阅读。例如,阅读这样的代码要容易得多:双 alpha = b1.r + b2.r -2*b1.r*b2.r;比读这个:双 alpha = b1.getR() + b2.getR() - 2*b1.getR()*b2.getR();

但是,因为这是一个半径,它的平方也被经常使用,并且我想计算一次,所以我希望有一个半径的 setter ,这样我就可以同时更新 r 及其平方。所以我希望 r 是私有(private)的,以强制使用 setR() 但我希望它是公开的,以便可以引用它来阅读。有谁知道在 Java 中执行此操作的方法吗?

最佳答案

Java 没有只读属性的概念。

如果你允许 r 可读,有人可以并且将会随机更改它。此外,养成这种习惯也是一个坏习惯。只是不要。远景的例子是:如果你需要它在一些奇怪的非欧几里得空间中发挥作用怎么办?现在你无论如何都必须去解决这个问题来解决它。

现实的选择:

您可以偏离规范并将 getter 命名为 r()。几乎一样短。

或者,您可以将此类数学插入 Circle 类中,在其中它可以直接引用其成员。您可以使用较短的名称获得更好的封装部分。

class Circle() {
static double alpha(Circle c1, Circle c2) {
return c1.r + c2.r -2*c1.r*c2.r
}
...
}

关于java - 如何在不使用 private 的情况下强制使用 setter 方法? (公共(public)用于读取,私有(private)用于写入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15319199/

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