I have interface:
public interface CartService extends RemoteService{
T execute(Action action);
}
I wish override 'execute' method in implementation:
public class XX implements CartService {
@Override
public GetCartResponse execute(GetCart action) {
// TODO Auto-generated method stub
return null;
}
}
But receive compiler error:
The method execute(GetCart) of type XX must override or implement a supertype method
GetCart & GetCartResponse:
public class GetCart implements Action{
}
public class GetCartResponse implements ActionResponse {
private final ArrayList items;
public GetCartResponse(ArrayList items) {
this.items = items;
}
public ArrayList getItems() {
return items;
}
}
How can I override this method ?
解决方案
The problem is the definition of the interface vs what the erausre should look like for your impl. In your example you have:
T execute(Action action);
public GetCartResponse execute(GetCart action);
but according to the interface definition the implementation method should read:
public GetCartResponse execute(Action action);
So I think you either need to change the signature of your interface or add another type parameter such as:
public interface CartService extends RemoteService{
T execute(U action);
}
or possibly something along the lines of:
public interface CartService extends RemoteService{
ActionResponse execute(Action action);
}