Java ArrayList,最终条目作为类属性

标签 java arraylist

我想定义一个以 ArrayList 作为其参数之一的类。 ArrayList 的条目应该是最终的。根据我的理解,简单地将类的 ArrayList 属性声明为“final”并不能实现这一点,因为它只是意味着对此列表的引用是最终的。我如何声明列表中的条目将被视为“最终”?

 public class MyClass{

    private final ArrayList<Double> classAttributeWithFinalValues; // the entries of the list can still be changed


    public MyClass(ArrayList<Double> classAttribute){
        this.classAttributeWithFinalValues = classAttribute;
    }
 }

最佳答案

ArrayList 始终是可变的,如果您希望 list 是不可变的,您可以创建自己的列表实现,该实现在被添加后不允许 add() 操作内置,或者干脆使用 Guava 的 ImmutableList 。该列表是使用构建器类构建的,一旦构建,就无法修改:

ImmutableList<String> myList =  ImmutableList.<String>builder().add("a").add("b").build();
myList.add("c"); //Throws UnsupportedOperationException

另一方面,如果您只希望条目不可变,而不是映射本身,那么这取决于您放入列表中的对象。您在代码片段中使用的 Double 已经是不可变的。但是,如果您想让可变对象不可变,则必须将它们包装在不允许访问 setter 方法的包装器中,或者确保返回存储的原始项目的副本。

关于Java ArrayList,最终条目作为类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35130236/

相关文章:

java - ArrayList困惑

java - 您会如何为体育节目编写深度图和阵容?

Java - ArrayList 返回空

java - 如何填写列表列表?

java - Javafx-在具有gradle错误的intelliJ上:包javafx.fxml不存在导入javafx.fxml.FXML

java - Android 在 UI 线程上加载共享首选项

java - Neo4j 的 php api 与 java 遍历框架

java - 可以使 java.util.ArrayList<T>.toArray() 更友好吗?

java - JFrame 未正确加载

java - 应用服务器和JVM是什么关系?