[英]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
類型的對象)。
因此,編譯器“理解” T
為Class<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.