2013-04-21 97 views
1

这是我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型的重心顶点(例如标签顶点)
  • M类型的Vertx名单!= T(例如Image Vertex)

and ret瓮型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不是推断?

+0

你是什么意思*为什么没有推断T型?*? – 2013-04-21 16:05:23

+0

类别TagImagesHyperEdge 类型T必须替换为TagVertex – nawara 2013-04-21 16:06:27

+1

是的,它会被推断出来,但在'search'方法中有不同的''。 – 2013-04-21 16:08:14

回答

5

您在方法定义中将T从接口定义映射到T中。 千万不要这样做。他们是不同的,不相关的类型参数,没有办法从另一个推断。你的方法签名基本上是说的一个非常混乱的方式:

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

拇指的Java规则:它永远有道理使用方法级类型参数,如果它在方法签名中只使用一次。方法级别类型参数对于在参数类型或返回类型之间表示约束很有用。