变
好处可以在JavaDoc文档中阅读的第一个形容词中找到:不可变。
有时,当您使用的代码需要 Set
(或 等)时。在你自己的上下文中,你可能只严格需要一个项目。若要实现自己的目标,即强制实施仅单项规则,同时需要在集合中呈现该项目,请使用禁止添加多个项目的实现。List
Set
Collections::singleton
上的“不可变”意味着,一旦创建,生成的对象保证只有一个项目。不是零,也不是超过一个。无法添加更多内容。无法删除一个项目。Set
例如,假设您的代码正在使用代表公司 CEO(CEO)的对象。你的代码只明确地处理CEO,所以你知道一次只能有一个这样的对象,总是一个CEO。但是,您希望利用一些现有代码来为指定的对象集合创建报表。通过使用,您可以保证自己的代码不会错误地拥有除单个员工之外的其他代码,同时仍然能够通过 .Employee
Employee
Employee
Collection.singleton
Set
Set< Employee > ceo = Collections.singleton( new Employee( "Tim Cook" ) ) ; // Always exactly one item in this context, only one CEO is possible.
ceo.add( … ) ; // Fails, as the collection is immutable.
ceo.clear() ; // Fails, as the collection is immutable.
ceo.remove( … ) ; // Fails, as the collection is immutable.
someReport.processEmployees( ceo ) ;
Java 9:Set.of
& List.of
Java 9及更高版本提供了新的接口方法Set.of
和List.of
来获得相同的效果,即单个元素的不可变集合。
Set< Pet > pet = Set.of( someDog ) ;
重载同级方法以接受任意数量的元素位于不可变集合中,而不仅仅是一个元素。of
Set< Pet > pets = Set.of( someDog , someOtherDog , someCat ) ;