我的界面看起来像
public interface KeyRetriever {
public Object getKey(Object obj);
}
我希望实现类似于
CustomerTypeKeyRetriever(实现类)
public String getKey(Customer customer) {
return null;
}
我怎样才能做到这一点。目前它抛出一个编译错误 - “CustomerTypeKeyRetriever类型必须实现继承的抽象方法KeyRetriever.getKey(Object)”
答案 0 :(得分:4)
在接口声明中使用泛型。
public interface KeyRetriever<T> {
public Object getKey(T obj);
}
现在在你的子类中你可以实现它
public class CustomerTypeKeyRetriever implements KeyRetriever<String> {
public String getKey(String str){
//your implementation
}
}
答案 1 :(得分:0)
您的实施应该有像
这样的方法@Override
public Object getKey(Object obj) {
// TODO Auto-generated method stub
return null;
}
我还会在我的所有实现方法上添加一个@Override注释,以便编译器可以在以后的API更改中捕获任何方法更改/冲突。
如果你想要通用的界面,下面应该可以工作(这是我认为你可能想要的)
public interface KeyRetriever<T> {
public Object getKey(T obj);
}
public class CustomerTypeKeyRetriever implements KeyRetriever<Customer> {
@Override
public String getKey(Customer obj) {
// TODO Auto-generated method stub
return null;
}
}
这里返回类型可以是Object的任何子类,因为java支持covariant返回类型。
答案 2 :(得分:0)
假设你有一个Person界面:
public interface Person {}
您的客户和员工类实施了:
public class Customer implements Person {/* Your class body */}
public class Employee implements Person {/* Your class body */}
然后你可以改变你的界面:
public interface KeyRetriever {
public String getKey(Person person);
}
然后在您的Customer类中,您必须更改为:
public String getKey(Person perosn) {
return null;
}
希望有所帮助。快乐的编码:)