次のシンプルなインターフェースがあります。
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 の特定のインスタンスに依存する ISimmilarityMeasure のインスタンス「sim」を返します。
ResourceDescriptor[] candidates
また、実行時に、特定の ISimmilarityMeasure オブジェクトに必要な 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 であるため、呼び出しを許可することをコンパイラーに明確にすべきではないでしょうか? 特定の ISimmilarityMeasure が特定のタイプの ResourceDescriptor を期待しているが、別のタイプが渡された場合、実行時に例外になるべきではありませんか?