2011-02-09 3 views

ответ

0

я должен спросить ... почему вы хотите сделать это?
все операторы сравнения зависят от класса, реализующего Comparable, а не только от метода compareTo, и я не думаю, что это можно заставить использовать этот интерфейс для существующего класса.
afaik, вам понадобится другой подход

1

Один из подходов заключается в реализации интерфейса Comparator.

Другой способ заключается в использовании metaClass, как вы хотели, но вы не сможете использовать оператор <=> поскольку List не реализует Comparable.

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 
+0

Спасибо, armandino. – guai

0

Вы можете пометить список, как Сопоставимые:

List.metaClass.compareTo = { other -> 
    delegate[0] <=> other[0] 
} 
assert ([1,2] as Comparable) <=> ([3,4] as Comparable) == -1 
assert ([3,4] as Comparable) <=> ([1,2] as Comparable) == 1 
assert ([3,4] as Comparable) <=> ([3] as Comparable) == 0 
Смежные вопросы