2013-04-12 43 views
4

我的項目的第一部分是構建一個超圖是否抽象方法的返回值可以是通用型的

這是一個迅速,吸引了UML圖enter image description here

頂點類

public abstract class Vertex <T>{ 

int vertexId ; 
T vertexValue ; 

public abstract <T> T setVertexValue(); 

    } 

的imageVertex類

public class ImageVertex extends Vertex<Map<String, Instance>>{ 

@Override 
public <T> T setVertexValue() { 
    // TODO Auto-generated method stub 
    return null; 
}} 

我雖然有t類型將被自動推斷,因爲我定義它爲imageVertex地圖 和更高版本爲tagVertex作爲字符串

我錯誤地使用了泛型?

+1

漂亮的圖片,真的 – Andremoniy

回答

2

你已經重新定義了類型T的setVertexValue。用這個。

public abstract class Vertex <T>{ 

int vertexId ; 
T vertexValue ; 

public abstract T setVertexValue(); 

} 

它採用了通用的正確

public class ImageVertex extends Vertex<Map<String, String>> 
{ 

    @Override 
    public Map<String, String> setVertexValue() 
    { 
     // TODO Auto-generated method stub 
     return null; 
    } 

} 
2

看來你試圖寫:

public abstract class Vertex<T> { 

    int vertexId; 
    T vertexValue; 

    public abstract T setVertexValue(); // NOTE: no <T> 
} 

public class ImageVertex extends Vertex<Map<String, Instance>> { 

    @Override 
    public Map<String, Instance> setVertexValue() { 
     return null; 
    } 
} 

在你的代碼中,<T>

public abstract <T> T setVertexValue(); 

的是,陰影在Vertex<T>T一個完全獨立的泛型參數。

2

刪除<T>Vertex.setVertexValue

public abstract T setVertexValue(); 
1

setVertexValue()有一個類型參數<T>本身;這意味着它重新定義類的參數<T>。你的方法聲明看起來應該像

public abstract T setVertexValue(); 

(請注意沒有<T>的)

1

像這樣的東西必須爲你工作。

public abstract T setVertexValue(); 

刪除<T>

相關問題