什么是C++的const成员函数的Java等价物?

ef2*_*011 26 java

在C++中,我可以定义一个访问者成员函数,该函数返回私有数据成员的值(或引用),这样调用者就无法以任何方式修改该私有数据成员.

有没有办法在Java中这样做?

如果是这样,怎么样?

我知道final关键字但AFAIK,当应用于方法时:

  1. 防止在子类中覆盖/多态化该方法.
  2. 使该方法可以内联.(见@Joachim Sauer的评论如下)

但它不会限制方法返回对数据成员的引用,以便调用者无法修改它.

我忽略了一些明显的东西吗?

Joa*_*uer 21

const在Java中没有相当于C "类型修饰符"(遗憾的是).

你可以得到的最接近的是在可变对象周围返回一个不可变对象或一个不可变包装器.

但是,不变性不是Java的语言特性,因此您必须依赖于库.

不可变对象的示例是:

  • 原始包装Integer,Character..
  • String
  • File
  • URL

常用的不可变的包装(即约可变类型,以防止突变包装)是指那些通过返回Collecton.unmodifiable*()方法.

  • 这些是我希望在Java中看到的两件事:相当于"const"和将对象声明为不可变的方式,以便编译器可以检测到潜在的违规.[注释](http://stackoverflow.com/questions/203475/how-do-i-identify-immutable-objects-in-java/204015#204015)可能至少有助于后者. (4认同)

Eri*_*rik 7

这在java中不存在.final并且const具有不同的语义,除非应用于基本类型的变量.java解决方案通常涉及创建不可变类 - 其中对象在构造中初始化,并且不提供允许更改的访问器.这类的例子可以是例如StringInteger.


Lef*_*dis 5

您要么返回不可变对象,要么返回私有实例变量的副本.这样,对象的内部状态被"保护"免于修改,即:

private MyMutableObject mutable = ...

public MyMutableObject getMutableObject() {
   return new MyMutableObject(this.mutable);
}
`
Run Code Online (Sandbox Code Playgroud)