java - 如何理解netty的这种通用代码?
问题描述
我是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();
}
Constant 的泛型定义是 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)
。
关于这个主题有一个很好的教程。
推荐阅读
- java - 使用 Spring Boot 应用程序的自定义健康指标实现健康检查休息 API
- google-apps-script - 如何使用谷歌应用脚本将谷歌幻灯片转换为带有注释的 pdf?
- javascript - Renderer2 错误 - id 不匹配任何元素
- python - Python - 传递 URL 字符串以提取组件
- python - 如何在python中打开带有双引号的csv文件
- php - WordPress 用户数
- qt - QML 多窗口应用程序结构化方法
- excel - 具有 2 个条件的 COUNTIF
- javascript - GitHub API CORS 政策
- swift - Core Data 派生属性在首次使用时未正确计算?