为什么我必须在使用的Generic类之后跟随static才能编译以下代码?
public static<Integer>void main(String args[]){
BinaryTree<Integer> tree = new BinaryTree<Integer>();
}
我只能假定您要尝试定义BinaryTree
的节点的类型为class Integer
,因此您已经编写了类似的内容。
public class BinaryTree<Integer> {
// Code
public static void main(String args[]) {
BinaryTree<Integer> tree = new BinaryTree<Integer>();
}
}
在上面的代码中,Integer
没有其通常的含义。因为它出现在类名称后面的尖括号中,所以实际上它是一个类型参数。通常,类型参数具有单字母名称,但是名称Integer
是允许的。
因为该main
方法是静态的(属于该类,而不是该类的单个实例),所以它无权访问type参数。这就是为什么代码main
无法编译的原因。
通过写
publie static <Integer> void main(String args[])
相反,您正在使该main
方法通用。方法的类型参数(再次称为Integer
!)隐藏该类的类型参数,然后代码进行编译。
要解决该问题,您可以使类具有参数类型T
,或者完全删除类的类型参数(如果所有BinaryTree
实例都具有type Integer
,则根本不需要类是泛型的)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句