Java 如何在Kotlin中使用现有比较器

Java 如何在Kotlin中使用现有比较器,java,lambda,kotlin,comparison,comparator,Java,Lambda,Kotlin,Comparison,Comparator,我可以这样做: java.lang.ClassCastException: org.organicdesign.fp.xform.TransformableTest$testToImSortedSet$comp$1 cannot be cast to java.util.Comparator 或 但是有更好的办法吗?我觉得我不应该为此创建新的包装函数。您可以使用,而不是 val comp = Comparator{ a:Int, b:Int -> a.compareTo(b) } 。。

我可以这样做:

java.lang.ClassCastException:
org.organicdesign.fp.xform.TransformableTest$testToImSortedSet$comp$1
cannot be cast to java.util.Comparator

但是有更好的办法吗?我觉得我不应该为此创建新的包装函数。

您可以使用,而不是

val comp = Comparator{ a:Int, b:Int -> a.compareTo(b) }
。。。写下这句话:

val comp = Comparator { a: Int, b: Int -> Integer.compare(a, b) }

用例是什么?除非您显式地需要一个比较器实例,否则您可能不需要将方法本身作为参数来传递。这更简单,谢谢,但它是否编译为强制转换,或者它是否仍然在应该与比较器兼容的现有函数周围添加包装器?没有比较器这样的东西“与Comparator兼容的函数。”函数是函数,
Comparator
是对象。除了包装器,没有其他选择。@LouisWasserman那么,如果您有一个接受“Comparator”的Kotlin方法,您建议将其声明为
(A,A)->Int
而不是
Comparator
?后者似乎更具体,这在某种程度上吸引了我。我不想要任何旧的返回Int的同类型2参数函数。我想要一个实际的Comparator,不?在实践中,可能没有太大区别,我不知道。不。它们会归结为完全相同的东西,并且两种情况下的对象。
Integer::compare
不是“展开的”。它会以静默方式创建一个包装器。
val comp = Comparator{ a:Int, b:Int -> a.compareTo(b) }
val comp = Comparator { a: Int, b: Int -> Integer.compare(a, b) }
val comp = Comparator(Integer::compare)