В Java, каков наилучший подход для обеспечения естественного упорядочения для всех реализаций интерфейса?
У меня есть интерфейс, для которого я хочу обеспечить / обеспечить естественное упорядочение между всеми реализациями, расширяя интерфейс Comparable
:
public interface MyInterface extends Comparable<MyInterface> {
}
Будет несколько реализаций этого интерфейса,каждый из которых может определять естественное упорядочение для своих собственных экземпляров, но может не знать, как упорядочить себя по отношению к другим реализациям.
Один из подходов, который я использовал, заключается во введении рекурсивных обобщений и разделении естественного порядкасравнение по реализации и экземпляру:
public interface MyInterface<X extends MyInterface<X>> extends Comparable<MyInterface> {
@Override
default int compareTo(MyInterface o) {
// the interface defines how to compare between implementations, say...
int comp = this.getClass().getSimpleName().compareTo(o.getClass().getSimpleName());
if (comp == 0) {
// but delegates to compare between instances of the same implementation
comp = compare((X) o);
}
return comp;
}
int compare(X other);
}
Это означает, что реализации MyInterface
должны сравнивать только свои собственные экземпляры:
public class MyClass implements MyInterface<MyClass> {
public int compare(MyClass other) {
return 0; // ... or something more useful...
}
}
Но рекурсивные обобщения могут стать оченьтрудно поддерживать.
Есть ли лучший способ?