Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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 是否与多个泛型类型发生冲突?_Java_Generics_Interface - Fatal编程技术网

Java 是否与多个泛型类型发生冲突?

Java 是否与多个泛型类型发生冲突?,java,generics,interface,Java,Generics,Interface,这是我的干涉二进制异源复制 public interface BinaryHeterogenousHyperedge <M extends Vertex<L>, L,T extends Vertex<E>, E> extends Hyperedge { public <T> List<Vertex> search(T centroid ,List<M> allElemntsVertex); } 为什么类型

这是我的干涉
二进制异源复制

public interface BinaryHeterogenousHyperedge
    <M extends Vertex<L>, L,T extends Vertex<E>, E>
extends Hyperedge
{
    public <T> List<Vertex> search(T centroid  ,List<M> allElemntsVertex);
}

为什么类型
T
没有被推断出来?

您正在用方法定义中的T来隐藏接口定义中的T永远不要这样做。它们是不同的、不相关的类型参数,无法从一个参数推断出另一个参数。您的方法签名基本上是一种非常令人困惑的说法:

public List<Vertex> search(Object centroid, List<M> allElementsVertex);
公共列表搜索(对象质心,列表等位基因vertex);

Java的一条经验法则:如果方法级类型参数在方法签名中只使用一次,那么使用它是没有意义的。方法级别的类型参数对于表示参数类型或返回类型之间的约束非常有用。

您正在使用方法定义中的T来隐藏接口定义中的T永远不要这样做。它们是不同的、不相关的类型参数,无法从一个参数推断出另一个参数。您的方法签名基本上是一种非常令人困惑的说法:

public List<Vertex> search(Object centroid, List<M> allElementsVertex);
公共列表搜索(对象质心,列表等位基因vertex);

Java的一条经验法则:如果方法级类型参数在方法签名中只使用一次,那么使用它是没有意义的。方法级类型参数对于表示参数类型或返回类型之间的约束非常有用。

为什么不推断类型T是什么意思?在类TagImageShippedGE中,类型T必须替换为TagVertexYes,它将被推断,但是您在
搜索
方法中有一个不同的
。@millimoose这应该是一个答案:)。是的,是的,我应该在搜索方法中删除感谢您为什么不推断类型T是什么意思?在类TagImageshTypeRedge中,类型T必须替换为TagVertexYes,它将被推断,但是你在搜索方法中有一个不同的
。@millimoose这应该是一个答案:)。是的,是的,我应该在搜索方法中删除,谢谢