2013-04-21 96 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規則:它永遠有道理使用方法級類型參數,如果它在方法簽名中只使用一次。方法級別類型參數對於在參數類型或返回類型之間表示約束很有用。