簡體   English   中英

從泛型推斷類型

[英]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>>

我希望我的問題有道理。

我不確定我是否理解您的問題,但是如果您在問:

  1. 我如何聲明一個LogUpdateListener ...
  2. 類型S擴展“類型O LogSet ”,...
  3. O類型在哪里擴展LogObject

然后,是的,您將其聲明為:

public interface LogUpdateListener<O extends LogObject, S extends LogSet<O>>

這是因為如果O是一個類型參數(我想這就是我所說的話),那么您需要在類型參數部分中對其進行聲明。 如果還希望將O綁定為LogObject的子類型, LogObject需要將該綁定與類型參數聲明一起添加。

但是,您應該記住:

  • 對於類型P ,其中PO適當子類型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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM