使用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
是(线程)安全和快速。