gpt4 book ai didi

Java 最终数组列表

转载 作者:太空狗 更新时间:2023-10-29 22:32:42 25 4
gpt4 key购买 nike

我的问题是关于将数组列表声明为最终的。我知道一旦我写了 final ArrayList list = new ArrayList(); 我可以从这个列表中添加、删除对象,但是我不能 list = new ArrayList() 或者列表 = 列表 1。但是将 arraylist 声明为的用途是什么Private static final ArrayList list = new ArrayList();。除了我上面提到的区别之外,以下两个声明之间的区别是什么:

1. ArrayList list = new ArrayList()

2. private static final ArrayList list = new ArrayList();

最佳答案

只是为了“给你的工厂带来一点水”,当你想让你的列表公开可用但不可修改时,你就会理解 final 的意义。

在 Java 中,可以使用 Collections.unmodifiableList(modifiableList) 使列表不可修改.

现在看看下面的代码:

public class MyClass{
public static List<String> MY_PUBLIC_LIST;
static{
ArrayList<String> tmp = new ArrayList<String>();
tmp.add("a");
tmp.add("b");
tmp.add("c");
MY_PUBLIC_LIST = tmp;
}
}

好吧,在任何类中,在代码中的任何地方你都可以做这样的事情

MyClass.MY_PUBLIC_LIST = null;
MyClass.MY_PUBLIC_LIST = new ArrayList<String>();
MyClass.MY_PUBLIC_LIST.clear();
MyClass.MY_PUBLIC_LIST.add("1");

当您将 final 关键字添加到您的变量时,前两个将不被允许

public static final List<String> MY_PUBLIC_LIST;

但是您仍然可以修改列表的内容:

MyClass.MY_PUBLIC_LIST.clear();
MyClass.MY_PUBLIC_LIST.add("1");

通过添加 Collections.unmodifiableList(modifiableList)在静态 block 的末尾,您也可以防止这种情况发生:

MY_PUBLIC_LIST = Collections.unmodifiableList(tmp);

好的,我们快到了。为了确保您了解全貌,让我们保留 Collections.unmodifiableList(modifiableList)但让我删除最终修饰符

public class MyClass{
public static List<String> MY_PUBLIC_LIST;
static{
ArrayList<String> tmp = new ArrayList<String>();
tmp.add("a");
tmp.add("b");
tmp.add("c");
MY_PUBLIC_LIST = Collections.unmodifiableList(tmp);
}
}

在那种情况下你能做什么?

...

...

好吧,你可以像第一种情况一样做任何你想做的事(假设你首先分配了新列表):

MyClass.MY_PUBLIC_LIST = null;
MyClass.MY_PUBLIC_LIST = new ArrayList<String>();
MyClass.MY_PUBLIC_LIST.clear();
MyClass.MY_PUBLIC_LIST.add("1");

关于Java 最终数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4525642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com