java 如果不满足某个条件,有没有可能用非void方法返回nothing

ruoxqz4g  于 2023-03-28  发布在  Java
关注(0)|答案(2)|浏览(135)

有没有一种方法可以在不满足某个条件的情况下不返回任何东西(甚至不返回null),而在满足该条件的情况下返回方法类型的一些东西(例如,如果方法是“int”,则返回“int”)?
现在我已经看到了注解,我已经读过关于Optional类的内容,但是我不能理解它。那么如果我有一个类似于ArrayList的方法,我是怎么做的呢?

static ArrayList<String> method() {
    if (true) {
        return ArrayList; }
    else {
        ? } //(equivalent of return nothing, not even null)

它应该是这样的,但是你能帮助我解释一下确切的语法吗?

static Optional method() {
    if (true) {
        return ArrayList<String>; }
    else {
        Optional.empty() } //(equivalent of return nothing, not even null)

好的,下面有一个注解,让我发布我的递归函数。这里我想要的是在第一个if语句中,有一个print和一个return语句。但是在函数的末尾有一个必要的return null,因此函数返回null。我希望函数返回它打印的内容,即索引,这样我就可以在其他地方使用它作为输入。

static ArrayList<String> connectionFinder(String linInit, String linFin, ArrayList<String> indices, ArrayList<ArrayList<String>> linArray) {
        if (linInit.equals(linFin)) {    //returns the indices list if linInit reaches linFin
            System.out.println(indices);
            return indices;
        }
        for (int i = 0; i < linArray.size(); i++) {
            if (linArray.get(i).contains(linInit) && !indices.contains(i)) {     //checks which stations are exchange stations for linInit, and checks the index to prevent infinite recursion
                for (int j = 1; j < linArray.get(i).size(); j++) {
                    if (!linArray.get(i).get(j).equals(linInit)) {    //j starts from 1 so as to avoid the station name, and checks if the linInit is different to prevent infinite recursion
                        connectionFinder(linArray.get(i).get(j), linFin, add(indices, i), linArray);    //changes the linInit, and adds the index ( add(ArrayList,value) is a custom method that returns the ArrayList instead of a boolean -ArrayList.add(value) returns a boolean-)
                    }
                }
            }
        }
        indices.remove(indices.size()-1);
        return null;
    }
xpszyzbs

xpszyzbs1#

你不能从一个非空的方法中返回任何东西。在大多数情况下,如果返回一个值没有意义,最好的做法是抛出一个异常。
例如:

public void setCarValue(int value) {
    if (value < MIN_VALUE) {
        throw new CarException(String.format("Value may not be less than %d", MIN_VALUE));
    }
    this.value = value;
}
6kkfgxo0

6kkfgxo02#

我会写一个单独的函数:

public static ArrayList<String> connectionFinder(String linInit, String linFin, ArrayList<ArrayList<String>> linArray) {
  ArrayList<String> indices = new ArrayList<>();
  connectionFinder(linInit, linFin, indices, linArray);
  return indices;
}

你的函数,现在是一个void:

private static void connectionFinder(String linInit, String linFin, ArrayList<String> indices, ArrayList<ArrayList<String>> linArray) {
    if (linInit.equals(linFin)) {
        return;
    }
    for (int i = 0; i < linArray.size(); i++) {
        // Loop omitted for clarity
    }
    indices.remove(indices.size()-1);
}

相关问题