为什么我必须使用已使用的Generic类跟随静态以便编译以下代码?
public static<Integer>void main(String args[]){
BinaryTree<Integer> tree = new BinaryTree<Integer>();
}
答案 0 :(得分:1)
我只能假设你要做的是定义一个BinaryTree
类,其节点的类型为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
实例都具有类型Integer
,则没有根本需要这个类是通用的。)
答案 1 :(得分:0)
我猜这可能无法编译的一种方式可能就是你有这样的东西
public class Test<Integer> {
public static<Integer> void main(String args []){
Map<Integer, String> aHash = new HashMap<Integer, String>();
}
}
你正在使用&#34;整数&#34;作为一个类型参数(这是合法的,虽然可能不是最好的主意)
现在这适用于非静态方法,即
public class Test<Integer> {
public void main(String args []){
Map<Integer, String> aHash = new HashMap<Integer, String>();
}
}
编译正常,但对于静态方法,不能使用类类型参数,因为您要对非静态类型参数进行静态引用。