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()Tをパラメーターとして受け取り、Io<T>戻り値として返します。

ただし、コードではTestMessage.class、パラメーターとして送信します。
TestMessage.classtype であり、 typeClass<TestMessage>ではありませんTestMessage(これはクラス オブジェクトであり、 type のオブジェクトではありませんTestMessage)。

したがって、コンパイラはそれが であると「理解」しT、からの戻り値の型であるClass<TestMessage>と期待しますが、それを(型の変数である)間違った型に再割り当てします。Io<Class<TestMessage>>create()uIo<TestMessage>

于 2012-12-27T12:45:10.177 に答える
1

あなたが探している署名は次のとおりだと思います。

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