0

このように試しました:

   ArrayList.metaClass.compareTo = {arg -> this?.size() <=> arg?.size() }  
   [1]<=>[2]

うまくいきません。

まだ例外の上昇がありますgroovy.lang.GroovyRuntimeException: Cannot compare java.util.ArrayList with value '[1]' and java.util.ArrayList with value '[2]'

4

3 に答える 3

1

1 つのアプローチは、Comparatorインターフェイスを実装することです。

もう 1 つは、必要に応じて を使用することですが、は を実装していないため、演算子metaClassを使用することはできません。<=>ListComparable

List.metaClass.compareTo = { Collection other ->
    delegate.size() <=> other?.size()
}

def x = [1, 2, 3]
def y = [4, 5]

println x.compareTo(y)  // but x <=> y won't work
于 2011-02-11T08:07:40.157 に答える
0

私は尋ねるべきです...なぜあなたはそれをしたいのですか?
比較演算子はすべて、compareTo メソッドだけでなく、Comparable を実装するクラスに依存しており、そのインターフェイスを既存のクラスに強制することはできないと思います。
afaik、別のアプローチが必要になります

于 2011-02-11T07:02:06.323 に答える