簡體   English   中英

在接口中使用Java泛型

[英]Using Java generics in interfaces

我想創建一個具有以下方法的接口:

public interface MyInterface {
  public Class<X> getClass();
  public void handle(X message);
}

其中X必須在兩種方法中都是相同的類型。 我需要這樣做的原因是我得到的消息是blob需要被轉換到適當的類(使用getClass)然后我想強制實現者實現一個帶有適當類的handle方法(而不是假設有一個並使用反射來調用它)。

看起來這樣做的唯一方法是在接口中添加一個類型參數,如下所示:

public interface MyInterface<T> {
...
}

但這不太理想,因為需要在各種其他類中指定該類型的級聯依賴。 有什么建議? 謝謝!

其中X必須在兩種方法中都是相同的類型

您不能僅通過定義強制接口的兩個方法相互依賴。
getClasshandle將始終是2個單獨的方法。
您可能應該做的是有1個方法, handle和傳遞作為參數類的類 (可以像Enum或任何指標一樣簡單)並委托給Factory來創建適當的類來在里面使用handle方法。
因此handle方法將(最終)獲得適當的類來使用。

您可以為方法指定泛型類型參數,如下所示:

public <X> void handle(X message);

但是這不能確保方法之間的一致性,所以如果你有:

public <X> Class<X> getClazz();
public <X> void handle(X message);

你不能說兩種方法的<X>都是一樣的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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