【问题标题】:How can I add a new method to a linked list instance?如何向链表实例添加新方法?
【发布时间】:2016-11-30 08:20:06
【问题描述】:

我已经声明了一个名为 ResultClassclass 并从中创建了一个 linkedList

private LinkedList<ResultClass> listOfResults;

现在我想添加一个名为getSample(Double d) 的新方法,我希望像listOfResults.getSample(0.5) 一样使用它。如何在 Java 中声明这样的方法?

【问题讨论】:

  • 简单:你不能。
  • 构建自己的LinkedList 类。
  • 要么构建自己的类,要么构建具有接受列表作为输入并返回所需结果的方法的类(即列表没有方法,但是方法中使用)。

标签: java methods linked-list


【解决方案1】:

您必须为此创建一个新类。例如:

public class SamplingLinkedList<T> extends LinkedList<T> {
   public List<T> getSample(double d) {
       return // something;
   }
}

【讨论】:

  • 在原始LinkedList 示例中,我有一个包含多个对象的列表。我想用上述方法getSample对它们做一些操作,我想返回原始链表的一部分。在您解决此问题的方法中,我该怎么做?
【解决方案2】:

如果您谈论的是作为 java.util 提供的 LinkedList - 答案是:您不能那样做。与其他编程语言相比,Java 不允许您向现有类添加方法(除非您拥有源代码并且可以更改该类的实现)。

您可以做的一件事是:创建您自己的 List 接口实现(并使用该 LinkedList 来实现它)并添加您正在寻找的那些方法。最简单的方法是扩展 java.util.LinkedList;但如果您更喜欢组合而不是继承,您可能会选择自己完全实现该 List 接口。

【讨论】:

    【解决方案3】:
    • 将其定义为ResultClass中的getSample方法。
    • 扩展 LinkedList(可以通过包装一个真实的链接列表,在这种情况下您可以选择 1)
    • 使用static方法,将链表作为附加参数,可以在任何地方定义。

    【讨论】:

      【解决方案4】:

      将方法添加到的唯一方法是扩展类:

      class MyResultList extends LinkedList<ResultClass>
      

      并在那里添加方法。

      但这需要您创建该类的实例:您不能将方法“改造”到现有实例。

      一个更简单的替代方法是声明一个将链表作为参数的方法:

      static ResultClass getSample(LinkedList<ResultClass> results, double valye)
      

      没有必要在那个链表的类中。

      甚至可能不需要使用LinkedList 作为参数:也许该方法的逻辑仍然可以使用ListCollectionIterable。这将使该方法更普遍适用。您不能使用基于继承的方法来做到这一点。

      【讨论】:

      • 提示:为什么要为静态方法使用 LinkedList;列表就可以了。
      • @GhostCat 如果getSample 使用LinkedList 特定的方法,则不会。
      猜你喜欢
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      相关资源
      最近更新 更多