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

2022-09-04 21:23:54

做有什么区别

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

    public class Node<Key, Value> {
       Key key;
       Value val;
    }
}

并做

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

    public class Node {
       Key key;
       Value val;
    }
}

即内部类上的类型参数是否重要?哪种实现更好?


答案 1

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

例如,在顶部声明中,您可以创建一个如下所示的实例...

BST<MyComparable, String>.Node<Integer, Boolean> x = new ...

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

如果尝试在第二个示例中执行此操作,则会收到错误,因为内部类不是泛型的。在第二个示例中,字段的类型必须与外部类型参数匹配。NodeNode


答案 2

推荐