Java 具有嵌套泛型的不可转换类型

Java 具有嵌套泛型的不可转换类型,java,nested-generics,Java,Nested Generics,我看了其他类型转换Java泛型的问题,我仍然感到困惑 我有下面的类层次结构:WeightedThing(只是给一些随机类型添加了一个权重)和一个自定义的Vector类,其中WeightedVector(不,WeightedVector不仅仅是WeightedThing)是一个子类 我想进行最近邻搜索,并返回到给定查询向量及其距离的最近向量列表。为此,我定义了一个search方法: public List<WeightedThing<? extends Vector>> s

我看了其他类型转换Java泛型的问题,我仍然感到困惑

我有下面的类层次结构:
WeightedThing
(只是给一些随机类型添加了一个权重)和一个自定义的
Vector
类,其中
WeightedVector
(不,
WeightedVector
不仅仅是
WeightedThing
)是一个子类

我想进行最近邻搜索,并返回到给定查询向量及其距离的最近向量列表。为此,我定义了一个
search
方法:

public List<WeightedThing<? extends Vector>> search(Vector, int limit) {...}

public ListList of
WeightedThing通常,在方法的返回类型中使用野生字符类型不是一个好的做法。为什么不尝试更改方法签名,如下所示:

public <T extends Vector> List<WeightedThing<T>> search(T vector, int limit) {...}
公共列表搜索(T向量,int限制){…}

这有帮助吗?谢谢你的建议,但不是真的,请看我对下面Ale E答案的评论。除了我希望能够使用
向量调用
search
,但从调用
add
时添加了
WeightedVector
后,可以返回
WeightedThing
的列表之外,这也行得通。我知道这可能会导致无效类型,但我希望编译器相信我所做的是正确的。我对答案并不完全满意,但这更多是因为Java。:)
 List<WeightedThing<WeightedVector>> neighbors = (List<WeightedThing<WeightedVector>>)
                                                (List<?>)search(query, 1);
public <T extends Vector> List<WeightedThing<T>> search(T vector, int limit) {...}