1

ジェネリックを使用して、インターフェイスを実装するオブジェクトを受け入れようとしていClientますが、うまくいかないようです。

public interface Client {
  public void makeMove();
}

public MyClient implements Client {
  public MyClient(Server server) {
    server.connectClient(this);
  }
}

上記のエラーは次のとおりです。The method connectClient(Class<? extends FanoronaClient>) in the type Server is not applicable for the arguments (GUIClient)

ジェネリックを持つサーバー:

public class Server {
  private Class<? extends Client> client_;

  public void connectClient(Class<? extends Client> client) {
    client_ = client;
    client_.makeMove(); // type error here
  }
}

そして、ここでのエラーはThe method makeMove() is undefined for the type Class<capture#7-of ? extends Client>

私は何を間違っていますか?

4

2 に答える 2

4

java.lang.Class存在しないclass のメソッドを呼び出そうとしています。実際に必要なのは、メソッドに渡されるクラス/インターフェースの実装です。

代わりconnetClientに、メソッドは次のようになります。

public void connectClient(Client client) {
    client.makeMove(); // no more type error
}

もちろん、クラスで this への参照を保持したい場合は、クラスの_clientメンバーServerも type になるように変更する必要がありますClient

この例では、ジェネリックをまったく使用したくないと思います...

于 2013-03-23T21:32:01.480 に答える
0

このコードを試してください:

public class Server {
      private Class<? extends Client> client_;

      public void connectClient(Class<? extends Client> client) {
        client_ = client;
        client.newInstance().makeMove(); // no error here 
      }
    }
于 2013-03-23T21:35:05.637 に答える