簡體   English   中英

通用工廠類實例化

[英]Generic factory class instantiation

如果有這樣的TCP / UDP通信工廠

public enum IoFactory {
  // Singleton
  INSTANCE;

  public <T> Io<T> create(T type, TransportProtocol protocol) {
    ...
    return ...;
  }
}

創建Io接口:

public interface Io<T> {
  public void send(T msg);
  public T receive();
}

但是,當我使用創建Io的實例時

IoFactory factory = IoFactory.INSTANCE;     
Io<TestMessage> u = factory.create(TestMessage.class, TransportProtocol.UDP);

我收到一個編譯錯誤,說正確的實例應該是

Io<Class<TestMessage>> u = factory.create(TestMessage.class, TransportProtocol.UDP);

這是怎么回事?

create()接受T作為參數,並返回Io<T>作為返回值。

但是,在您的代碼中,您將TestMessage.class作為參數發送。
TestMessage.class的類型為Class<TestMessage> ,而不是TestMessage的類型(它是類對象,而不是TestMessage類型的對象)。

因此,編譯器“理解” TClass<TestMessage> ,並期望Io<Class<TestMessage>>應該是create()的返回類型,但是您隨后將其重新分配給u這是Io<TestMessage>類型的變量Io<TestMessage> -錯誤的類型。

我認為您要查找的簽名是:

public <T> Io<T> create(Class<T> type, TransportProtocol protocol) {

暫無
暫無

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

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