有什么方法可以强制实例或功能接口静态方法输出以 Collections.immutable(x) 之类的方式不可变?
例如,我想为一些类似静态构建器的方法创建实例创建某种比较器功能接口,并禁止像“.thenComparing()”这样的链式操作。
有什么方法可以强制实例或功能接口静态方法输出以 Collections.immutable(x) 之类的方式不可变?
例如,我想为一些类似静态构建器的方法创建实例创建某种比较器功能接口,并禁止像“.thenComparing()”这样的链式操作。
你可以通过返回一个不可变类的实例来强制你的返回值是不可变的。在不知道类做什么的情况下,没有通用的方法可以使您的类的实例不可变。
您问题的第二段包含一个不正确的假设,.thenComparing(...)
使比较器可变。 thenComparing
保持原始比较器完好无损,并制作一个新的比较器。
可悲的是,Java 集合类型缺少不可变集合,但 google guava 带有许多不可变集合(请参阅https://code.google.com/p/guava-libraries/wiki/ImmutableCollectionsExplained),因此您可以使用它们作为回报类型。然而,我看不出这与比较事物的能力有何关联,因为比较不会改变事物。