我正在查看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文件,每个返回值的示例都在类级别定义或在传入的参数之一中定义。