我是Java的新手,最近正在学习netty。
一些通用的类代码使我感到困惑。像这样:
package io.netty.util;
/**
* A singleton which is safe to compare via the {@code ==} operator. Created and managed by {@link ConstantPool}.
*/
public interface Constant<T extends Constant<T>> extends Comparable<T> {
/**
* Returns the unique number assigned to this {@link Constant}.
*/
int id();
/**
* Returns the name of this {@link Constant}.
*/
String name();
}
常量的泛型定义是self的子类,这使我感觉像是循环引用。这样的代码的目的是什么?
弓
最佳答案
该接口的设计者想要实际的实现工具Comparable
,因此需要一段代码extends Comparable<T>
。而不是比较任何对象,而是比较同一Constant的其他实例。
因此,在这种情况下,T
表示实现Constant
的实际类型。
如果要实现它,则必须编写如下内容:
public class MyConstant implements Constant<MyConstant> {
...
@Override
public int compareTo(MyConstant myConstant) {
return 0;
}
}
T
上的约束强制实现提供方法compareTo(MyConstant myConstant)
。此主题上有a nice tutorial。