当前位置: 首页 > 知识库问答 >
问题:

Java接口-对象到类类型转换

梁承恩
2023-03-14

我有一个界面,看起来像

公共接口密钥检索器{

public Object getKey(Object obj);

}

我希望实现是这样的

CustomerTypeKeyRetriever(实现类)

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

我该如何实现这一点。目前它抛出一个编译错误——“类型CustomerTypeKeyRetriever必须实现继承的抽象方法KeyRetriever.getKey(Object)”

共有3个答案

秦弘亮
2023-03-14

假设您有一个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);
}

在您的客户类别中,您必须这样更改:

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

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

方长卿
2023-03-14

您的实现应该具有如下方法

@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支持协变返回类型。

倪鸿禧
2023-03-14

在接口声明中使用泛型。

public interface KeyRetriever<T> {

public Object getKey(T obj);
}

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

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

  }
 }
 类似资料:
  • 主要内容:强制对象类型转换将一个类型强制转换成另一个类型的过程被称为类型转换。本节所说的 对象类型转换,是指存在继承关系的对象,不是任意类型的对象。当对不存在继承关系的对象进行强制类型转换时,会抛出 Java 强制类型转换(java.lang.ClassCastException)异常。 Java 语言允许某个类型的引用变量引用子类的实例,而且可以对这个引用变量进行类型转换。Java 中引用类型之间的类型转换(前提是两个类

  • 问题内容: 我很好奇为什么Go 不会隐式转换为,而Go 会隐式转换为。我缺少这种转换的重要内容吗? 例: 抱怨 不能在函数参数中使用(类型[]字符串)作为类型[] interface {} 如果我尝试明确执行此操作,则会遇到同样的事情:抱怨 无法将(类型[]字符串)转换为类型[] interface {} 因此,每次我需要进行这种转换时(这似乎很多),我一直在做这样的事情: 是否有更好的方法来执行

  • 我正在努力理解在这段代码中创建的C()对象。 我理解,当它在第3行创建时,它是一个对象,具有A类中的引用。我还了解到,您可以从B类中的引用中引用第4行的相同对象。但是我不明白第4行参考o1的施法。这改变了对象还是仅仅改变了它被引用的方式? 我真的很感激你的解释:)谢谢

  • 问题内容: 我对接口和类实现接口有疑问。 这是我的代码: 我想创建一个这样的实例: 可以,但是如何从接口实例中调用?这是安全的吗? 感谢帮助。 问题答案: 是的,就可以了(如果你改变的声明来实现),并作为参考真的很安全,只要 不 参考的实例。 但是,这通常是个坏主意。使用接口的全部目的是能够与 任何 实现一起使用- 它是将抽象与实现分开。如果你然后将需要一个具体的实现,你还不如让的类型正好与开始。

  • 问题内容: 我正在使用返回“对象”类型的普通对象的Web服务。调试清楚地表明此对象中存在某种Array,因此我想知道如何将“ Object”转换为Array(或类似对象)? 我尝试了以下方法: 但是没有任何效果。我总是得到一个InvocationTargetException。 我究竟做错了什么? 编辑 : 可悲的是,我不得不删除指向显示Eclipse调试器输出的图像的链接,因为它不再可用。请不要

  • 问题内容: 在Java中,从Object转换为其他类型时,为什么第二行会产生与转换相关的警告,而第一行却没有? 问题答案: 这是因为在执行时,由于 类型Erase 不会 真正 检查对象是否为a 。真的只是将其投射到。例如: __ 有关更多信息,请参见Angelika Langer的Java泛型常见问题解答 ,尤其是类型擦除部分。