我正在查看一些关于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文档,每个返回值的示例都在类级别上定义,或者在传递的参数之一中定义。
ObjectInputStream::readObject
也能添加这种行为就太好了。 - Mordechai