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

时间:2015-08-29 21:02:10

标签: java generics

之间有什么区别
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 个答案:

答案 0 :(得分:13)

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

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

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

...因为类型参数在两个类之间是不同的 - 你刚刚选择给内部泛型类型参数同名作为外部类中的类型参数,但是它们没有关系。

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