2

我有一个看起来像的界面

公共接口 KeyRetriever {

public Object getKey(Object obj);

}

我希望实现类似于

CustomerTypeKeyRetriever(实现类)

public String getKey(Customer customer) {
    return null;
}

我怎样才能做到这一点。目前它会引发编译错误 - “类型 CustomerTypeKeyRetriever 必须实现继承的抽象方法 KeyRetriever.getKey(Object)”

4

3 回答 3

4

在你的接口声明中使用泛型。

public interface KeyRetriever<T> {

public Object getKey(T obj);
}

现在在你的子类中你可以实现它

 public class CustomerTypeKeyRetriever implements KeyRetriever<String> {
  public String getKey(String str){
        //your implementation

  }
 }
于 2012-11-09T15:55:51.830 回答
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 支持协变返回类型。

于 2012-11-09T15:54:56.730 回答
0

假设您有一个 Person 界面:

public interface Person {}

您的 Customer 和 Employee 类实现了:

public class Customer implements Person {/* Your class body */}
public class Employee implements Person {/* Your class body */}

然后你可以像这样改变你的界面:

public interface KeyRetriever {

public String getKey(Person person);
}

然后在您的客户类中,您必须像这样进行更改:

public String getKey(Person perosn) {
   return null;
}

希望有帮助。快乐编码:)

于 2012-11-09T16:04:00.723 回答