私は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で「gotodeclaration」を押すと<X>
パブリックメソッドシグネチャのinに移動します。
次の2つの例を使用してこのメソッドを呼び出して、何が起こるかを確認しました。
public Date getExpiredate() {
return get("expiredate");
}
public String getSubject() {
return get("subject");
}
それらはコンパイルされ、エラーや警告は表示されません。少なくとも、これを機能させるにはキャストを行う必要があると思います。
これは、ジェネリックスが何でもかまいませんが、実行時に爆発する魔法の戻り値を許可することを意味しますか?これは、ジェネリックスが行うことになっていることに反しているようです。誰かが私にこれを説明し、おそらくこれをもう少しよく説明するいくつかのドキュメントへのリンクを教えてもらえますか?ジェネリックスに関するSunの23ページのPDFを確認しましたが、戻り値のすべての例は、クラスレベルで定義されているか、渡されたパラメーターの1つに含まれています。