我想,現在我會理解Java泛型。但現在我又無助了。Java泛型+靜態工廠方法= [恐慌]
我有一個泛型類,其中c-tor構造正確類型的實例,而靜態工廠方法產生類型不匹配。
請看下面的代碼:
public class _GenericFactoryMethods {
public final static class DemoClass<T1, T2> {
private final T1 _1;
private final T2 _2;
// static factory method
public static <T1, T2> DemoClass<T1, T2> create(T1 _1, T2 _2) {
return new DemoClass<T1, T2>(_1, _2);
}
// usual c-tor
public DemoClass(T1 _1, T2 _2) {
this._1 = _1;
this._2 = _2;
}
public T1 get1() { return _1; }
public T2 get2() { return _2; }
}
public void doSomething() {
String str = "test";
Class<? extends CharSequence> _1 = str.getClass();
CharSequence _2 = str;
// works
DemoClass<Class<? extends CharSequence>, CharSequence> dc1 =
new DemoClass<Class<? extends CharSequence>, CharSequence>(_1, _2);
// compile error
DemoClass<Class<? extends CharSequence>, CharSequence> dc2 =
DemoClass.create(_1, _2);
}
}
的錯誤是:
Uncompilable source code - incompatible types
required: _GenericFactoryMethods.DemoClass<java.lang.Class<? extends java.lang.CharSequence>,java.lang.CharSequence>
found: _GenericFactoryMethods.DemoClass<java.lang.Class<capture#794 of ? extends java.lang.CharSequence>,java.lang.CharSequence>
請幫助理解和解決這個問題。
(我真的需要一些這樣的類的靜態工廠方法)。
編輯
有人能也解釋爲什麼顯式類型參數必須使用?
謝謝。那麼,寫通常的構造函數是更長的;)對於我的特殊情況(**不是**的例子),我真的需要靜態工廠方法。 – 2010-02-22 12:48:44
嘆息,沒有機會擊敗提及小貓的答案。起首! ;) – sfussenegger 2010-02-22 13:00:02
@sfussenegger:是的,這是有點作弊,每個人都喜歡小貓))) – Roman 2010-02-22 13:06:10