通过引用传递的 java 函数原语

标签 java function reference primitive

我遇到过好几次这个问题,所以我在这里问一下最佳做法是什么

我有一个过程可以实现多个对象,修改它们并升起一些标志。

    boolean erros = false;
    for(MyData data: allData){
    //...

        //@ToDo  move this to a function titleCheck()
        if(data.getTitle().isEmpty()){
            data.setTitle('none');
            erros = true;
        }

        if(data.getTitle().equals('BIG')){
            data.setTitle('small')
        }

        if(data.getTitle().equals('error')){
            errors = true;
        }

    //...
    }

我需要一个函数来更新数据并更改一个或多个标志 所以首选的语法是这样的:

MyData updatedData = titleCheck(MyData data, &erros){...}

但是 boolean 值不能通过引用传递,所以它们的工作原理是:

boolean errors = titleCheck(MyData dataForUpdate){...}

女巫不太直观..(至少对我来说......来自 PHP 背景) 如果您有多个标志要更新,问题会变得更大。

那么 .. 处理这种结构的正确 Java 方法是什么。

最佳答案

当你这样做时:

titleCheck(MyData data);

根据上面的代码,您实际上是在更改数据对象 - 不是它的副本。因此,您可以返回成功/失败 boolean 值,而不必返回传递的对象。所以现在您可以将这些值组合在一起。

boolean error = false;
error |= titleCheck(...);
error |= nameCheck(...);

等等

如果你想传回对象和状态,你可以简单地声明一个返回类:

class ReturnResult {
   public boolean error;
   public MyData data;
}

(我已将这些字段公开,因为我将其用作简单结构)。这种方法的优点是您可以利用 OO 将相关对象联系在一起,并且可以将方法放在上面的类上,以便轻松合并连续的结果。

最后,我注意到您在 MyData 对象上调用了很多方法,并在该对象之外确定了成功/失败。我宁愿将此放在 MyData 对象中。然后 MyData 对象可以存储自己的有效/无效状态,您可以通过 isValid() 方法或类似方法向它询问自己的状态。这似乎是一种非常面向对象的处理方法。

关于通过引用传递的 java 函数原语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13743091/

相关文章:

java - 在Matlab中编译和调用命令窗口内容

java - 如何在android中消失按钮

java - 如何从 java 程序重命名 jar 文件?或从命令提示符以任何其他方式重命名?

具有变量且参数​​数量未知的 C++ 函数

c++ - std::list::sort 和指向元素的指针

c++ - 当我以不同方式定义对同一变量的引用时,结果不同

c++ - 在 C++ 中使用引用进行向上转换

Java:从两个焦点的坐标开始绘制Ellipse2D

python - 在 python 3 中生成随机整数列表

c++ - 由于模板函数,在条件语句之外声明类对象时出现问题