这个问题在这里已经有了答案:
What is the Java equivalent of C++'s const member function?
(9 个回答)
11 个月前关闭。
在 C++ 中我们做了一个常量方法,所以它不能改变类成员的值,但是我怎么能在 Java 中做到呢?
我尝试了 final 方法声明,它等同于 C++ 中的 consts,但 final 方法是另一回事。
我想做一个getter方法,所以它不能改变值,只能读取它。就像一个只读方法。
最佳答案
在 Java 中,不可能以声明方式阻止方法更改非 final 字段。 Java 中没有“常量正确性”这样的东西。
如果类字段不是 final
,那么它可以被类的任何方法改变。
请注意 final
与方法和类相比,字段和变量的工作方式不同:
final
字段或变量是一个常数。它的值一旦分配就不能更改。 final
方法不能被子类覆盖。 final
on 方法与“constness”无关。 final
类不能扩展。 final
在类里面与“恒定性”无关。 您在 Java 中的选项是:
final
)。 再一记。即使在字段和变量上,Java 的
final
不同于 C++ 的 const
.例如:final
变量一旦赋值就不能改变,但你可以在声明之后赋值。例子: final int value;
if (condition) {
value = 1; // Ok!
} else {
value = 2; // Ok!
}
value = 3; // Compile error: value already assigned.
final
必须分配类字段 - 直接分配或从构造函数中分配。但是这些字段可以在构造函数中的任何地方分配。 Java 中没有像 C++ 的“初始化列表”这样的特殊东西。final Object obj
在 Java 中大致相当于对 C++ 中非常量对象的 (const-) 引用。这意味着,您不能重新分配引用,但您可以更改引用的对象本身。一个例子: // Note that (obsolete) Date class is mutable in Java.
final Date myDate = new Date();
myDate = new Date(); // Compilation error: can't reassign a final reference!
myDate.setTime(4711); // Ok, mutating referenced object is allowed!
关于java - 如何在Java中声明一个不能改变类成员的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65071616/