编写返回值可能无效的Java方法的可接受方法是什么?

时间:2017-07-28 01:46:18

标签: java

我来自C编程背景。我想了解在返回值的情况下编写Java API的最佳方法是什么,但它可能无效。

我有一个实现二叉搜索树的类。它有一个方法getRootValue(),它返回root的值。

C代码 -

df.groupby(['SERIES1', 'SERIES2']).min() 

                 SERIES3
SERIES1 SERIES2         
A       1             10
        2              4
B       1              1
C       1              7

在用户端,这就是它的样子 -

boolean getRootValue(int *answer) {
    if (root != null) {
        *answer = value;
        return TRUE;
    } else {
        return FALSE;
    }
}

调用此函数的用户将检查返回值,如果返回值为if (getRootValue(&answer)) { //process valid answer } ,则仅将answer视为有效。

Java框架代码 -

TRUE

用户结束 -

package algorithm;
class bst {
    node root;
    class node {
        int value;
        node left;
        node right
    }

    //getRootValue()
}

在Java中,什么是正确的方法(考虑到只有BST而不是用户知道root)?我们应该发送一个包含布尔值和答案的特殊类对象吗?如果是这样,这个类应该在哪里定义?

有不同的方法吗?我应该对我的bst类实现有不同的看法吗?

以前有一些问题询问如何返回多个值。这不是我的问题。我想知道实现这种特殊情况的理想方法,甚至可能不需要返回多个对象。

3 个答案:

答案 0 :(得分:2)

我甚至不会写这个方法。你需要一个特定的方法来获得它的价值,根本没有什么特别之处。整个方法是多余的。你需要一些东西来获得根,你需要一些东西来从任何节点(及其左右儿童)中获取价值。

我会写两个方法:

  1. Node Tree.getRoot()
  2. int Node.getValue()
  3. 通过从null返回getRoot()来满足您提到的例外情况,来电者可以轻松检测到这一情况。

答案 1 :(得分:2)

从Java 8开始,您可以使用Optional作为不确定答案的回报。

Optional<Integer> getRootValue() {
    return root != null ? Optional.of(value) : Optional.empty(); 
}

然后客户端代码可以使用lambda表达式来平滑地处理该值(如果存在)。

getRootValue().ifPresent(value -> {
    // process the value
    System.out.println(value);
})

答案 2 :(得分:1)

不确定这是否是执行此操作的绝对最佳方式,但在Java中,我建议创建/使用异常。然后,用户可以根据是否抛出异常来测试返回值是否有效。

int getRootValue(int answer) throws Exception{
    if (root != null){
        return value;
    }else{
        throw new NullPointerException("Root is null");
    }
}

在用户端

try{
    myVal = getRootValue(answer);
}catch(Exception e){
    e.printStackTrace(); //There was an error here
}