【问题标题】:Can a method return another method with same return type?一个方法可以返回另一个具有相同返回类型的方法吗?
【发布时间】:2016-05-13 10:05:03
【问题描述】:

这是我的双向链表(循环)实现中的代码块。

能不能返回一个方法,比如addBefore方法的return语句?

public boolean addAfter(int value, int target) {
    Node targetNode = findExact(target);
    Node temp = new Node(value);

    if(targetNode == null) {
        return false;
    } else if((targetNode.next == null)) { //prevNode is head, when list.size = 1
        temp.next = head;
        temp.prev = targetNode;
        targetNode.next = temp;
        head.prev = temp;
        size++;
        return true;
    } else if(targetNode.next == head) { //prevNode is tail,
        temp.next = targetNode.next;
        temp.prev = targetNode;
        targetNode.next = temp;
        head.prev = temp;
        size++;
        return true;
    } else { //prevNode is a node inbetween two nodes
        temp.next = targetNode.next;
        temp.prev = targetNode;
        targetNode.next = temp;
        temp.next.prev = temp;
        size++;
    }
    return true;
}

public boolean addBefore(int value, int target) {
    Node targetNode = findPrev(target);
    return addAfter(value, targetNode.data);    
}

【问题讨论】:

  • 它不是返回另一个方法,而是返回另一个方法返回的值。话虽如此,是的,你没有理由不能这样做。
  • 你尝试的时候发生了什么?
  • 得到了 NullPointerException,这意味着我没有从 addAfter 中找到一些逻辑错误,或者 addAfter 不应该只是这样应用,因为在其目标之前添加节点的性质可能需要不同的逻辑。感谢您确认这项工作,就像我想的那样,我想我会在弄清楚如何解决它之后回答自己。

标签: java return return-value return-type


【解决方案1】:

我认为你想声明从方法返回一个值,以防你想要利用 addAfter 的 addBefore 方法。该位是有效的,您应该查看底层方法 addAfter 的语义,并可能 findExact 以了解它们返回的导致 NPE 的内容。

也可以返回一个方法,这里不需要它,但这里假设有一个名为 myMethod 的方法,它接受一个整数数组,语法如下所示:

            Method myMethod;
            try {
                myMethod = TestApp.class.getDeclaredMethod("myMethod", int[].class);
                myMethod.invoke(null, ar);

            } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    相关资源
    最近更新 更多