我有一個傳統類的類本身不是一個通用的,但它的方法返回類型使用泛型:非一般引用泛型類導致非泛型返回類型
public class Thing {
public Collection<String> getStuff() { ... }
}
getStuff()
使用泛型返回一組字符串。因此,我可以遍歷getStuff()
而且也沒有必要元素轉換爲String
:
Thing t = new Thing();
for (String s: t.getStuff()) // valid
{ ... }
但是,如果我改變Thing
本身是一個通用的,但保持一切相同:
public class Thing<T> {
public Collection<String> getStuff() { ... }
}
然後繼續使用非泛型引用Thing
,getStuff()
不再返回Collection<String>
,而是返回一個非類型的Collection
。因此客戶端代碼無法編譯:
Thing t = new Thing();
for (String s: t.getStuff()) // compiler complains that Object can't be cast to String
{ ... }
這是爲什麼?什麼是解決方法?
我的猜測是,通過使用泛型類的非泛型引用,Java關閉了整個類的所有泛型。這很痛苦,因爲現在我已經通過讓Thing成爲通用的代碼來破壞我的客戶端代碼。
編輯:我對Thing通用的另一種方法,沒有在上面的示例代碼中列出。我的問題是教育,爲什麼不能做到上述。
我正在做Thing通用因爲另一種方法(我沒有在我的例子中列出)。 – 2009-01-16 00:38:20