我正在查看一些用于 GWT 的 GXT 代码,我遇到了泛型(Generics)的这种用法,在 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,每个返回值的例子都是在类级别定义的,或者是在传入的参数中定义的。