在Java内部类中编写类型参数

ion*_*n20 13 java generics

这样做有什么区别

public class BST<Key extends Comparable<Key>, Value> {

    public class Node<Key, Value> {
       Key key;
       Value val;
    }
}
Run Code Online (Sandbox Code Playgroud)

并做

public class BST<Key extends Comparable<Key>, Value> {

    public class Node {
       Key key;
       Value val;
    }
}
Run Code Online (Sandbox Code Playgroud)

即在内部类上做类型参数是否重要?哪种实施更好?

ade*_*hus 13

你似乎认为这两者是等价的 - 他们不是.顶部示例声明了两个泛型类,底部示例声明了一个泛型类和一个非泛型内部类.

例如,在顶部声明中,您可以创建一个这样的实例......

BST<MyComparable, String>.Node<Integer, Boolean> x = new ...
Run Code Online (Sandbox Code Playgroud)

...因为类型参数在两个类之间是不同的 - 您只是选择为内部泛型类型参数提供与外部类中的类型参数相同的名称,但它们不相关.

如果您尝试在第二个示例中执行此操作,则会出现错误,因为内部类Node不是通用的.在第二个示例中,Node字段的类型必须与外部类型参数匹配.