Java接口 - 对类进行类型转换的对象

时间:2012-11-09 15:50:26

标签: java object interface

我的界面看起来像

public interface KeyRetriever {

public Object getKey(Object obj);

}

我希望实现类似于

CustomerTypeKeyRetriever(实现类)

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

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

3 个答案:

答案 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;
}

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