如何声明一个不能在java中更改类成员的方法?

rqcrx0a6  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(321)

这个问题在这里已经有答案了

c的const member函数的java等价物是什么(9个答案)
上个月关门了。
在c
中,我们使用常量方法,因此它不能更改类成员的值,但在java中如何实现呢?我尝试了final方法声明,它与c++中的const是等价的,但是final方法是另一回事。我想创建一个getter方法,这样它就不能更改值,只能读取它。就像一个只读的方法。

px9o7tmv

px9o7tmv1#

在java中,不可能声明性地阻止方法更改非final字段。java中没有“const correction”这样的东西。
如果类字段是非- final ,则可以通过类的任何方法更改它。
请注意 final 在字段和变量上的工作方式与方法和类不同:
final 字段或变量是常量。一旦赋值,其值就不能更改。
final 方法不能被子类重写。 final 论方法与“恒常性”无关。
final 类不能扩展。 final 在课堂上与“恒常性”无关。
java中的选项包括:
使类不可变(即标记其所有字段 final ).
只需仔细编写getter(和其他非变种方法):)
再来一张纸条。即使在字段和变量上,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!

l7mqbcuq

l7mqbcuq2#

你不能那样做。final方法意味着它不能被重写。

相关问题