Я смотрю на какой-то код GXT для GWT, и я наткнулся на это использование 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");
}
Они компилируют и не показывают ошибок или предупреждений. Я думаю, по крайней мере, мне нужно будет сделать бросок, чтобы заставить это работать.
Означает ли это, что Generics допускает магическое возвращаемое значение, которое может быть чем угодно и просто взорвется во время выполнения? Это похоже на то, что должны делать дженерики. Может ли кто-нибудь объяснить это мне и, возможно, дать мне ссылку на какую-то документацию, которая объясняет это немного лучше? Я прошел через Sun 23 page pdf на generics, и каждый пример возвращаемого значения определяется либо на уровне класса, либо находится в одном из переданных параметров.