使用Java的Collections.singletonList()?

Java中Collections.singletonList()的用法是什么? (据我所知,它返回一个元素列表,为什么我想要一个单独的方法来做到这一点?在这里,不变性是如何起作用的?)

这种方法有没有特别有用的用例,而不仅仅是一个方便的方法?

javadoc这样说:

“返回只包含指定对象的不可变列表,返回的列表是可序列化的。”

你问:

为什么我想要有一个单独的方法来做到这一点?

作为一个方便…为了节省您不得不写一连串的语句:

  • 创build一个空的列表对象
  • 添加一个元素,并
  • 用一个不可变的包装器来包装它。

这种方法有没有特别有用的用例,而不仅仅是一个方便的方法?

显然,在使用singletonList方法方面有一些用例。 但是我不知道如何(客观地)区分一个普通的用例和一个“特别有用”的用例。

以下是关于单例方法的一个观点 :

我发现这些不同的“单例”方法对于将单个值传递给需要收集该值的API是有用的。 当然,当处理传入值的代码不需要添加到集合中时,这是最好的。

如果一个Immutable / Singleton集合指的是只有一个对象并且没有被进一步修改的集合,那么通过使得只有一个对象的集合“UnmodifiableCollection”可以实现相同的function。 由于不可修改的集合可以通过一个对象实现相同的function,那么Singleton Collection服务的特殊用途是什么?

 @param the sole object to be stored in the returned list. @return an immutable list containing only the specified object. import java.util.*; public class HelloWorld { public static void main(String args[]) { // create an array of string objs String initList[] = { "One", "Two", "Four", "One",}; // create one list List list = new ArrayList(Arrays.asList(initList)); System.out.println("List value before: "+list); // create singleton list list = Collections.singletonList("OnlyOneElement"); list.add("five"); //throws UnsupportedOperationException System.out.println("List value after: "+list); } } 

当代码需要一个只读列表时使用它,但你只想传递一个元素。 singletonList是(线程)安全和快速。