我查看了我仍然感到困惑的其他类型转换 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 不会将其标记为错误,但使用 Sun 的 Mac OS X 的 jdk7u10 编译它会失败)。也不用 . 调用相同的函数Vector
。我可以通过添加向上转换来强制它编译Object
,但这看起来很可怕。
这样做的目的是我可以搜索和添加任何类型的向量,但如果我知道我只添加了 WeightedVectors,我想将结果转换回 WeightedVectors。