Java中的不可变实例/功能接口

时间:2015-04-04 20:42:11

标签: java java-8 functional-interface

有没有办法强制实例或功能接口静态方法输出以Collections.immutable(x)之类的方式不可变?

我希望例如创建一些Comparator功能接口,并禁止像“.thenComparing()”这样的链接操作用于某些类似静态构建器的方法创建的实例。

2 个答案:

答案 0 :(得分:2)

您可以通过返回不可变类的实例来强制返回值是不可变的。在不知道类的功能的情况下,没有通用的方法可以使类的实例不可变。

您的问题的第二段包含一个错误的假设,即.thenComparing(...)使比较器可变。 thenComparing保留了原始比较器的完整性并制作了新的比较器。

答案 1 :(得分:0)

可悲的是,Java集合类型缺少不可变集合,但google guava带有大量不可变集合(请参阅https://code.google.com/p/guava-libraries/wiki/ImmutableCollectionsExplained),因此您可以将它们用作返回类型。 然而,我无法看到这与比较某些东西的能力有何关联,因为比较不会改变东西。