如果有这样的 TCP/UDP 通信工厂
public enum IoFactory {
// Singleton
INSTANCE;
public <T> Io<T> create(T type, TransportProtocol protocol) {
...
return ...;
}
}
创建Io
接口(interface):
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>
类型的变量- 类型错误。
关于java - 通用工厂类实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14054836/