我有一个传统类的类本身不是一个通用的,但它的方法返回类型使用泛型:非一般引用泛型类导致非泛型返回类型
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