首页 > 解决方案 > 如何理解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 的子类,这让我感觉像是一个循环引用。这样的代码的目的是什么?

标签: javagenerics

解决方案


这个接口的设计者想要实际的实现实现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)

关于这个主题有一个很好的教程。


推荐阅读