有没有办法推断对象O的类型,如下例所示(不会编译):
public interface LogUpdateListener<S extends LogSet<O>> {
void logUpdated(O object);
}
因此,在上面的示例中,LogSet
是通用的,O
位于O extends LogObject
。如果使用S extends LogSet
,那么使用S
是否可以推断出O
的类型用作logUpdated
方法的类型?
这是明确这样做的唯一方法:
public interface LogUpdateListener<O extends LogObject, S extends LogSet<O>>
我希望我的问题有道理。
答案 0 :(得分:2)
我不确定我是否理解了你的问题,但如果你问:
LogUpdateListener
... S
的{{1}}类型LogSet
&#34;,... O
类型扩展O
?然后,是的,您将其声明为:
LogObject
这是因为如果public interface LogUpdateListener<O extends LogObject, S extends LogSet<O>>
是一个类型参数(我认为你这么说),那么你需要在类型参数部分声明它。如果您还想将O
绑定为O
的子类型,则需要将该绑定与类型参数声明一起添加。
但是,你应该记住:
LogObject
类型,其中P
是P
O
(P < O
)LogSet<P>
不是 LogSet<O>
这可能意味着您需要在方法声明中使用通配符参数化类型的LogSet<? extends O>
或LogSet<? super O>
,例如,您想要从/向(按此顺序)复制其他{{1对象。