与多种泛型类型交互?

naw*_*ara 1 java generics interface

这是我的干预BinaryHeterogenousHyperedge:

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);
}
Run Code Online (Sandbox Code Playgroud)

方法搜索有两个参数:

  • 类型的质心顶点T(例如Tag Vertex)
  • Vertx类型的列表M!= T(例如Image Vertex)

并返回两个类型T和的顶点列表M

TagsImagesHyperEdges 实现这个接口:

public class TagImagesHyperedge
    implements BinaryHeterogenousHyperedge
                   <ImageVertex,Map<String, Instance> ,TagVertex,String>
{

@Override
public <T> List<Vertex> search(T centroid, List<ImageVertex> allElemntsVertex)
    {
        // TODO Auto-generated method stub
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么T不推断类型?

mil*_*ose 5

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

public List<Vertex> search(Object centroid, List<M> allElementsVertex);
Run Code Online (Sandbox Code Playgroud)

Java的经验法则:如果方法级别的类型参数仅在方法签名中使用一次,那么它就没有意义.方法级类型参数可用于表示参数类型或返回类型之间的约束.