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