0

如果有这样的 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();
}

但是,当我创建 with 的实例Io

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

我收到一个编译错误,说正确的实例化应该是

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

这是怎么回事?

4

2 回答 2

3

create()接受 a T, 作为参数并Io<T>作为返回值返回。

但是,在您的代码中,您TestMessage.class作为参数发送。
TestMessage.class是 type Class<TestMessage>,而不是 type TestMessage(它是类对象,不是 type 对象TestMessage)。

因此,编译器“理解”即TClass<TestMessage>并且期望Io<Class<TestMessage>>应该是 from 的返回类型create(),但是您随后将其重新分配给u- 这是一个类型的变量Io<TestMessage>- 错误的类型。

于 2012-12-27T12:45:10.177 回答
1

我认为您正在寻找的签名是:

public <T> Io<T> create(Class<T> type, TransportProtocol protocol) {
于 2012-12-27T12:45:44.653 回答