做
之间有什么区别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;
}
}
即。在内部类上做类型参数吗? 哪种实施更好?
答案 0 :(得分:13)
你似乎认为这两者是等价的 - 他们不是。 顶部示例声明了两个泛型类,底部示例声明了一个泛型类和一个非泛型内部类。
例如,在顶部声明中,您可以创建一个像这样的实例......
BST<MyComparable, String>.Node<Integer, Boolean> x = new ...
...因为类型参数在两个类之间是不同的 - 你刚刚选择给内部泛型类型参数同名作为外部类中的类型参数,但是它们没有关系。
如果您尝试在第二个示例中执行此操作,则会收到错误,因为内部类Node
不是通用的。在第二个示例中,Node
字段的类型必须与外部类型参数匹配。