相当于 Java 中的 const(C++)

2022-09-01 22:57:06

我想知道在Java中是否有与c ++的const等效的const。我理解 final 关键字,但不幸的是,我不能用它来声明函数返回值 final。相反,它始终确保该函数无法被覆盖,对吗?

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


答案 1

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

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

示例 -

public final Foo{

    private final String s;

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

    // Only provide an accessor!
    public String getString(){
        return s;
    }
}

答案 2

Java 不支持对对象的引用进行常量限定。

解决方法包括:

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

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

最接近的是只读接口类型。您可以将一个常量校正C++类映射到两个 Java 单元,其中一个单元是仅包含常量限定方法的接口。

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


推荐