gpt4 book ai didi

java 在实现类中声明方法,而不是在接口(interface)中声明方法

转载 作者:行者123 更新时间:2023-12-02 07:32:55 26 4
gpt4 key购买 nike

首先,我对 Java 缺乏经验。

回答我的问题,我正在用我自己的方法实现我自己的列表。

 public class MyList<E> implements List<E>{

private Node<E> head;

private static class Node<E> {
private E element;
.....
}

现在,此类中有一个方法可以将此列表与给定列表进行比较:

public boolean equals(List<E> list){
....
}

要启动此方法,首先我们必须获取列表的头部,以便之后我可以访问元素并比较列表。
现在,我们没有 getHead() 方法。因此,我们尝试在实现类中创建以下方法

public Node<E> getHead(){    

编译器找不到该符号。当然,我们需要先在接口(interface)中声明它。问题是,如果我们尝试这样做,接口(interface)不知道 Node 是什么。所以我在这里陷入僵局。

我收到错误:

  Cannot find symbol
symbol : method getHead()
location: interface List<E>
Node<E> lhead = list.getHead();

我希望它使 getHead 成为特定于实现的方法。我怎么做?

请问,我们可以把实现中的内部类移到接口(interface)中吗?不知道如何解决这个问题,

感谢您的宝贵时间

最佳答案

您是否正在实现 java.util.List或者您创建的一些自定义List界面?如果您使用的是标准类,当然您不能修改核心JDK类。

如果您有自定义的List界面,我会发现一些问题:

  • 您的equals()方法应该接受 Object 并向下转型。否则,您将重载而不是覆盖:

    public boolean equals(Object obj) {
    //check type first
    List<E> list = (List<E>)obj;
  • Node 类在 MyList 内部私有(private)定义。将其放入您的 List 界面中,即可公开访问。

  • 最后,通常您根据内容而不是表示来定义 equals()。您可能有多个 List 实现,只要它们以相同的顺序保存相同的数据,列表就应该被视为相等。在您的实现中,只有使用 head 抽象的列表是相等的。不要依赖 getHead(),而是使用迭代器并逐一比较项目。

关于java 在实现类中声明方法,而不是在接口(interface)中声明方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12681105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com