2014-07-10 81 views
2

我想在類中實現通用接口。 考慮實施此通用接口:在通用類中實現通用接口

public interface Lookup<T>{ 
    public T find(String name); 
} 

,這是不是通用類實現查找:

public class IntegerLookup implements Lookup<Integer>{ 
    private Integer[] values; 
    private String[] names; 

    public IntegerLookup(String[] names, Integer[] values) {......} 
    //now I want to write the implemented method - find 

,我的問題是: 怎麼做我需要寫這個實施方法? 我需要重寫它嗎?是?

public Object find(String name){...} 

會好嗎?或:

public Integer find(String name){...} 
+3

Anywhere在超類型中使用'T','Integer'應該用在'Integer'作爲'T'類型參數的子類中。 –

+0

爲什麼你不能只用@Override註解來嘗試呢? – Ordous

+0

@SotiriosDelimanolis,但它寫入對象不是在超類型T ...或者我錯了? –

回答

3

當你提供一個類型參數像你在這裏做

public class IntegerLookup implements Lookup<Integer>{ 
//           ^

你正在做的是結合提供給類型變量的類型聲明的類型。所以Integer必然是T

所以,

public Integer find(String name){...} 

這是一樣的做

Lookup<Integer> lookup = ...; 
lookup.find("something"); // has a return type of Integer 
+0

好吧,但我不明白,我可以寫也:公共對象查找(字符串名稱)? –

+1

@YuvalLevy當你在代碼中嘗試時會發生什麼? –

0

從您的意見,它聽起來就像你真的想用Object作爲返回類型。我無法想象爲什麼你會這樣做,但如果是這樣,你實際上需要實現Lookup<Object>而不是Lookup<Integer>

但不這樣做。使用Integer作爲返回類型,因爲該類型在您的實現中代表T