![](/img/trans.png)
[英]Inferring a generic type from a generic type in Java (compile time error)
[英]Inferring type from generic
是否有任何方法可以推斷對象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>>
我希望我的問題有道理。
我不確定我是否理解您的問題,但是如果您在問:
LogUpdateListener
... S
擴展“類型O
LogSet
”,... O
類型在哪里擴展LogObject
? 然后,是的,您將其聲明為:
public interface LogUpdateListener<O extends LogObject, S extends LogSet<O>>
這是因為如果O
是一個類型參數(我想這就是我所說的話),那么您需要在類型參數部分中對其進行聲明。 如果還希望將O
綁定為LogObject
的子類型, LogObject
需要將該綁定與類型參數聲明一起添加。
但是,您應該記住:
P
,其中P
是O
的適當子類型 ( P < O
) LogSet<P>
不是 LogSet<O>
的子類型 這可能意味着您需要使用LogSet<? extends O>
通配符參數化類型LogSet<? extends O>
LogSet<? extends O>
或LogSet<? super O>
例如,如果要從其他LogSet
對象(從該對象復制到該其他LogSet
對象),請在方法聲明中添加LogSet<? super O>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.