有没有办法强制实例或功能接口静态方法输出以Collections.immutable(x)之类的方式不可变?
我希望例如创建一些Comparator功能接口,并禁止像“.thenComparing()”这样的链接操作用于某些类似静态构建器的方法创建的实例。
答案 0 :(得分:2)
您可以通过返回不可变类的实例来强制返回值是不可变的。在不知道类的功能的情况下,没有通用的方法可以使类的实例不可变。
您的问题的第二段包含一个错误的假设,即.thenComparing(...)
使比较器可变。 thenComparing
保留了原始比较器的完整性并制作了新的比较器。
答案 1 :(得分:0)
可悲的是,Java集合类型缺少不可变集合,但google guava带有大量不可变集合(请参阅https://code.google.com/p/guava-libraries/wiki/ImmutableCollectionsExplained),因此您可以将它们用作返回类型。 然而,我无法看到这与比较某些东西的能力有何关联,因为比较不会改变东西。