Java:通用接口,在运行时选择实例

Java:通用接口,在运行时选择实例,java,generics,wildcard,bounded-wildcard,Java,Generics,Wildcard,Bounded Wildcard,我有以下简单的界面: public interface ISimmilarityMeasure<T extends ResourceDescriptor> { public double getSim(T s, T t); } 在运行时,我调用该方法 public static ISimmilarityMeasure<? extends ResourceDescriptor> getSimInstance(){ } 我使用eclipse,如果我查看sim可用的

我有以下简单的界面:

public interface ISimmilarityMeasure<T extends ResourceDescriptor> {
    public double getSim(T s, T t);
}
在运行时,我调用该方法

public static ISimmilarityMeasure<? extends ResourceDescriptor> getSimInstance(){ }
我使用eclipse,如果我查看sim可用的方法,它会显示
getSim(null s,null t)
。 我不明白为什么会这样。如果编译器不清楚,getSim必须期望任何ResourceDescriptor,并且
候选对象中的每个对象都是ResourceDescriptor,因此允许调用?如果特定的ISimmilarityMeasure需要某种类型的ResourceDescriptor,但却得到了另一种类型的ResourceDescriptor,那么在运行时这不应该是一个异常吗?

getSimInstance()
将为某些类型的
X
返回一个类型为
ISimmilarityMeasure
的对象。关于
X
我们只知道它继承自
ResourceDescriptor
。在这个对象上,您可以调用
getSim(ResourceDescriptor,ResourceDescriptor)
。但是,它不需要
ResourceDescriptor
参数,它需要
X
参数


虽然
X
始终是
ResourceDescriptor
,但不能保证
ResourceDescriptor
X
,因此编译器拒绝接受它。

您能展示一些实际的代码流吗。现在你说的话在我脑子里都混了。我找不到所有的。首先,我无法理解外面的
sim()
的实际签名。您已经向我们展示了3.由于接口ISimmilarityMeasure是通用的,因此getSim(..)的签名也是通用的。例如,在接口中是getSim(ts,tt),在normalizedLeventheinsim中是getSim(SimpleResourceDescriptor s,SimpleResourceDescriptor T)。“sim”是ISimmilarityMeasure的一个实例。在运行时选择特定的实现(例如,normalizedLeventheinsim或JaccardCommentsSim)。我承认,这有点令人困惑:)嗯,我说的是返回类型。在接口中,你有“代码>双< /代码>,然后在中间它是代码> iimMILARITY测量。对不起,这只是一个错误的命名——中间的一个(我把它命名为‘GesiMistStand’)是一个静态工厂方法来获得一个实现。code>double-getSim(ts,Tt)
是接口的实际计算方法。好的,我理解。是否有一个好的替代方法来替代我正在尝试的操作,或者我是否应该参数化,例如,使用getSim()方法并在其中执行SimpleResourceDescriptor的
实例检查?
public class JaccardCommentsSim implements
             ISimmilarityMeasure<LabelsCommentsResourceDescriptor> { ... }
public abstract class ComparableResourceDescriptor
             implements ResourceDescriptor 
public static ISimmilarityMeasure<? extends ResourceDescriptor> getSimInstance(){ }
"capture#3-of ? extends ResourceDescriptor ... is not applicable for the arguments (ResourceDescriptor ... "