中的方法我想在這裏實現的是由子類來決定是否要將java.lang.String或java.util.HashMap作爲參數傳遞給query()方法。接口只需要聲稱,子類必須實現查詢方法,但我不關心什麼類型的參數的子類希望在通過java泛型類型參數接口
我有一個像接口:
interface A<T>{
public void query(T type);
}
兩個子像:
public class B implements A<String> {
public void query(String type);
}
public class C implements A<HashMap> {
public void query(HashMap type);
}
然後,我有一個工廠類以產生B或C:
public class AFactory {
public static A<?> getType(String type) {
if(type.equals("B")){
return new B();
} else if(type.equals("C")) {
return new C();
}
}
}
的想法是,客戶端可以使用該接口,如下而不會對乙依賴性,C等:
A instance = AFactory.getType("B");
String a = "test";
instance.query(a);
問題我這裏是:日食給我誤差上instance.query的線(a) :
類型A中的方法查詢(capture#2 of?)不適用於參數(String)。
我認爲問題在於接口契約不知道查詢應該期待String或HashMap。我只能想到解決這個問題的辦法是,我要投像的結果:
B instance = (B)AFactory.getType("B");
String a = "test";
instance.query(a);
但是通過這樣做,我會對B的,而不是隻A(接口)的依賴這是一件好事我想在開始時避免。任何想法如何我可以做到這一點,而不依賴於子類(在這種情況下,B和C)。
編譯器查看A實例並說「我需要T,而不是String」,但是你不告訴他T是什麼。盡我所知。 – JMelnik 2012-04-17 13:22:59
graet,gotcha,謝謝@JMelnik – Shengjie 2012-04-17 14:15:50