我有以下简单的界面:
public interface ISimmilarityMeasure<T extends ResourceDescriptor> {
public double getSim(T s, T t);
}
和像这样的实现
public class NormalizedLevenstheinSim implements
ISimmilarityMeasure<SimpleResourceDescriptor> { ... }
和
public class JaccardCommentsSim implements
ISimmilarityMeasure<LabelsCommentsResourceDescriptor> { ... }
SimpleResourceDescriptor
和扩展LabelsCommentsResourceDescriptor
_
public abstract class ComparableResourceDescriptor
implements ResourceDescriptor
在运行时,我调用该方法
public static ISimmilarityMeasure<? extends ResourceDescriptor> getSimInstance(){ }
这将返回一个依赖于 ResourceDescriptor 特定实例的 ISimilarityMeasure 实例“sim”。
我还创建了一个数组ResourceDescriptor[] candidates
,它将在运行时保存特定 ISimilarityMeasure 对象所需的 ResourceDescriptor 类型的实例。
但是,如果我尝试调用sim.getSim(candidates[0], candidates[1])
编译器会告诉我
"capture#3-of ? extends ResourceDescriptor ... is not applicable for the arguments (ResourceDescriptor ... "
我使用 eclipse,如果我查看 sim 的可用方法,它会告诉我getSim(null s, null t)
. 我不明白为什么会这样。编译器是否应该不清楚 getSim 必须期待任何 ResourceDescriptor 并且其中的每个对象candidates
都是 ResourceDescriptor 并因此允许调用?如果特定的 ISimilarityMeasure 需要某种类型的 ResourceDescriptor 但被交给了不同的 ResourceDescriptor,那么它在运行时不应该是一个例外吗?