私はまだ混乱している他の型キャストJavaジェネリックの質問を見ました。
私は次のクラス階層を持っていWeightedThing<T>
ます。Vector
WeightedVector
WeightedVector
WeightedThing<Vector>
最近隣検索を行い、指定されたクエリ ベクトルとその距離に最も近いベクトルのリストを返したいと考えています。このために、search
メソッドを定義しました:
public List<WeightedThing<? extends Vector>> search(Vector, int limit) {...}
私ができることを願って
List<WeightedThing<WeightedVector>> neighbors = (List<WeightedThing<WeightedVector>>)search(query, 1);
これは機能しません (IntelliJ はエラーとしてマークしませんが、Mac OS X 用の Sun の jdk7u10 でコンパイルすると失敗します)。で同じ関数を呼び出すこともありませんVector
。にアップキャストを追加することで強制的にコンパイルできますObject
が、それはひどいようです。
これの目的は、任意のタイプのベクトルを検索して追加できるようにすることですが、WeightedVectors のみを追加したことがわかっている場合は、結果を WeightedVectors にキャストしたいと考えています。