Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在静态上下文中使用泛型类型 公共静态BTNode树副本(BTNode源) { if(source==null) 返回null; 其他的 { BTNode left=BTNode.treeCopy(source.left); BTNode right=BTNode.treeCopy(source.right); 返回新的BTNode(source.data,左,右); } }_Java_Generics_Static - Fatal编程技术网

Java 在静态上下文中使用泛型类型 公共静态BTNode树副本(BTNode源) { if(source==null) 返回null; 其他的 { BTNode left=BTNode.treeCopy(source.left); BTNode right=BTNode.treeCopy(source.right); 返回新的BTNode(source.data,左,右); } }

Java 在静态上下文中使用泛型类型 公共静态BTNode树副本(BTNode源) { if(source==null) 返回null; 其他的 { BTNode left=BTNode.treeCopy(source.left); BTNode right=BTNode.treeCopy(source.right); 返回新的BTNode(source.data,左,右); } },java,generics,static,Java,Generics,Static,我的问题是为什么我不能在静态上下文中使用泛型类型E?我试着搜索了几个答案,但没有找到任何使snese有效的答案。您需要在方法签名中声明泛型类型。由于这是一个静态方法,它无法从任何其他地方获取通用信息。因此需要在这里声明: public static BTNode<E> treeCopy(BTNode<E> source) { if(source == null) return null; else { BT

我的问题是为什么我不能在静态上下文中使用泛型类型E?我试着搜索了几个答案,但没有找到任何使snese有效的答案。

您需要在方法签名中声明泛型类型。由于这是一个静态方法,它无法从任何其他地方获取通用信息。因此需要在这里声明:

public static BTNode<E> treeCopy(BTNode<E> source)
{
     if(source == null)
         return null;
     else
     {
         BTNode left = BTNode.treeCopy(source.left);
         BTNode right = BTNode.treeCopy(source.right);
         return new BTNode(source.data, left, right);
     }

}
公共静态BTNode树副本(BTNode源)
{
if(source==null)
返回null;
其他的
{
BTNode left=BTNode.treeCopy(source.left);
BTNode right=BTNode.treeCopy(source.right);
返回新的BTNode(source.data,左,右);
}
}

E
可以代表任何东西。要使用
E
(作为泛型),您需要创建对象的实例。如果有静态方法,则无法执行此操作,因为泛型类型参数仅在类实例(包括其实例方法和实例字段)的作用域中

静态成员和字段属于类的每个实例。因此,如果您有一个
BTNode
实例和另一个
BTNode
实例,那么静态
treeCopy
应该使用什么呢<代码>字符串或
整数

有一个变通办法;您必须告诉静态方法
E
的含义。所以你必须这样定义它:

public static <E> BTNode<E> treeCopy(BTNode<E> source)
{
     if(source == null)
         return null;
     else
     {
         BTNode<E> left = BTNode.treeCopy(source.left);
         BTNode<E> right = BTNode.treeCopy(source.right);
         return new BTNode(source.data, left, right);
     }
}
公共静态BTNode树副本(BTNode源)

再看一看你的设计,看看这是否真的是你想要的。如果你不怎么解释为什么需要它,它总是好的。

可能重复。
public static <E> BTNode<E> treeCopy(BTNode<E> source)