通配符接受任何带接口的类型

时间:2013-03-23 21:26:06

标签: java generics

我正在尝试使用泛型来接受任何实现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>

我做错了什么?

2 个答案:

答案 0 :(得分:4)

您正尝试在类java.lang.Class上调用一个不存在的方法。您真正想要的是将您的类/接口的实现传递给您的方法。

您的connetClient方法应该是这样的:

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

当然,如果您想在课堂上保留对此内容的引用,则必须将_client类的Server成员更改为Client类型。< / p>

在这个例子中,我认为你根本不想使用泛型......

答案 1 :(得分:0)

尝试使用此代码:

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

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