为什么需要在JAVA的void静态方法签名中声明泛型?

小狗头忍者

为什么我必须在使用的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么铸造或泛型的使用需要在Java中添加字符串到的ArrayList?

为什么 Java 泛型不能用于静态方法?

什么是泛型java中的静态?

为什么返回类型的静态泛型方法之前,需要类型参数

.Net与Java中的静态泛型方法

为什么仅在特定情况下才需要在方法签名中抛出IOException?

为什么ClassCleanup属性需要在静态方法上?

为什么我们需要在打字稿中编写函数的泛型?例如函数 fill<IDontKnow>(){}

在泛型类中声明静态泛型变量

为什么需要强制转换 Java 泛型方法参数类

方法中的泛型声明

为什么我需要Typescript中的泛型

Java泛型-需要在对象映射器中泛化A.class

C#-方法签名中的泛型-为什么选择CS1503,“无法从IThing转换为ns.IThing”?

为什么要在函数中声明调用javascript类方法?

为什么泛型不能用代码编写的动作需要显式的参数声明

Java泛型:泛型Map(的深层副本)的方法签名

使用Scala中的泛型调用Java静态方法

为什么在使用泛型时方法重写不检查方法签名?

为什么包含main方法的类不需要在Java中公开?

为什么Final变量不需要在Java的main方法中初始化?

为什么Java Enum需要在compareTo方法中检查类和declaringClass

为什么委托方法需要在Swift中公开?

为什么Java泛型类型的推理在链式方法调用中中断?

泛型类中的泛型静态方法

为什么要在方法前添加void?

在定义中,仅当泛型类型为数组时,才需要特定的方法签名

为什么Java集合中的泛型如此奇怪?

如何使Java泛型方法静态?