与多种泛型类型的接口?

时间:2013-04-21 16:03:37

标签: java generics interface

这是我的Interfce 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);
}

方法搜索有两个参数:

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

并返回类型TM

的顶点列表

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;
    }
}

为什么不推断类型T

1 个答案:

答案 0 :(得分:5)

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

public List<Vertex> search(Object centroid, List<M> allElementsVertex);

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