Java 泛型:仅定义为返回类型的泛型类型
我正在查看GWT的一些GXT代码,我遇到了泛型的这种用法,我在Java教程中找不到另一个示例。类名是 com.extjs.gxt.ui.client.data.BaseModelData
如果你想查看所有代码。以下是重要部分:
private RpcMap map;
public <X> X get(String property) {
if (allowNestedValues && NestedModelUtil.isNestedProperty(property)) {
return (X)NestedModelUtil.getNestedValue(this, property);
}
return map == null ? null : (X) map.get(property);
}
X
在类中或层次结构中的任何地方都没有定义,当我在eclipse中点击“转到声明”时,它只是转到公共方法签名中。<X>
我尝试使用以下两个示例调用此方法,以查看会发生什么情况:
public Date getExpiredate() {
return get("expiredate");
}
public String getSubject() {
return get("subject");
}
它们编译并显示没有错误或警告。我会想,至少我必须做一个演员才能让它发挥作用。
这是否意味着泛型允许一个神奇的返回值,它可以是任何东西,并且在运行时就会爆炸?这似乎与泛型应该做的事情背道而驰。任何人都可以向我解释这一点,并可能给我一些文档的链接,以更好地解释这一点?我已经浏览了Sun关于泛型的23页pdf,每个返回值的示例都是在类级别定义的,或者在传入的参数之一中定义。