Java中const(C++)的等价物

low*_*owq 21 c++ java final

我想知道在Java中是否有相当于c ++的const.我理解final关键字,但遗憾的是我无法使用它来声明函数返回值final.相反,它始终确保功能不能被覆盖,正确吗?

基本上,我想确保给定的返回类不能被修改并且是只读的.这可能在Java中吗?

mre*_*mre 19

基本上,我想确保给定的返回类不能被修改并且是只读的.这可能在Java中吗?

不是直接的,但一种解决方法是不可变对象.

示例 -

public final Foo{

    private final String s;

    public Foo(String s){
        this.s = s;
    }

    // Only provide an accessor!
    public String getString(){
        return s;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言,这是一个解决方法,**不**等价!除了这种极其冗长且容易出错的方式之外,没有其他方法可以解决这个问题. (13认同)
  • 您还应该将最终修饰符添加到`s`的声明中,以禁止通过其他方法进行修改.(+ 1) (3认同)

And*_*mas 13

Java不支持对象引用的const限定.

解决方法包括以下内容:

  • 不可变的物体.
  • 可修改对象的不可修改视图(例如,Collections.unmodifiable*()返回的视图).
  • 只读接口类型
  • 防御性副本.

不可变对象阻止接收者修改,但它们也阻止通过任何引用进行修改.它们不等同于C++ const指针/引用.

最近的是只读接口类型.您可以将const-correct C++类映射到两个Java单元,一个是仅具有const限定方法的接口.

这有时很有用,可以控制可以修改类实例的内容.但是,它并没有像在C++中那样频繁地完成.