2013-03-23 60 views
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>

我在做什麼錯?

+1

爲什麼你MyClient類不實現從makeMove方法實現界面? – 2013-03-23 21:28:41

回答

4

您正試圖調用類java.lang.Class中不存在的方法。你實際需要的是你的類/接口的一個實現被傳遞給你的方法。

connetClient方法應該是這個樣子,而不是:

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

當然,如果你想在你的類此的引用,你必須改變你的Server類的_client成員也可以是Client

你想在這個例子中使用泛型都被我不認爲......

0

試試這個代碼了:

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

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