我有一个抽象的通用超类,我扩展它以创建具有特定类型 ID 的具体类:
public abstract class AbstractEntity<I> {
...
private I id;
private String name;
...
}
我创建这样的具体类:
public class User extends AbstractEntity<Long> {...}
现在我想让具体类与它们自身的其他实例相比较(并且没有其他类型——这应该在编译时强制执行)。默认情况下,该compareTo
方法应仅按名称排序,因此我想将其添加到超类中以避免重复代码。我想出的唯一方法是使用这个丑陋的结构:
public abstract class AbstractEntity<I,T> implements Comparable<AbstractEntity<I,T>> {
...
private I id;
private String name;
...
@Override
public int compareTo(AbstractEntity<I,T> o) {
...
}
}
...
public class User extends AbstractEntity<Long,User> {...}
我认为这很丑,因为现在为了扩展超类,您需要再次重复具体的类名作为其自身的类型参数,这很奇怪且违反直觉。有没有更优雅的方式来完成我所缺少的相同的事情?
谢谢!