Java ArrayList,最终条目为class属性

时间:2016-02-01 12:13:07

标签: java arraylist

我想定义一个具有ArrayList作为其参数之一的类。 ArrayList的条目应该是final。根据我的理解,简单地将类的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;
    }
 }

1 个答案:

答案 0 :(得分:0)

ArrayLists总是可变的,如果你希望列表是不可变的,你可以创建自己的列表实现,在构建之后不允许add()操作,或者只是使用番石榴的ImmutableList。该列表是使用构建器类构建的,一旦构建,就无法修改:

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

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