我想从Java方法返回两个对象,并想知道这样做的好方法是什么?
我能想到的可能的方法是:返回HashMap(因为这两个对象是相关的),或者返回ArrayList的Object对象.
更确切地说,我想要返回的两个对象是(a)List对象和(b)逗号分隔的对象.
我想从一个方法返回这两个对象,因为我不想遍历对象列表以获取逗号分隔的名称(我可以在此方法的同一循环中执行).
不知何故,返回a HashMap看起来并不是一种非常优雅的方式.
我想从groovy中编写的函数返回多个值并接收它们,但是我收到了一个错误
class org.codehaus.groovy.ast.expr.ListExpression及其值'[a,b]',是一个坏表达式,作为赋值运算符的左侧
我的代码是
int a=10
int b=0
println "a is ${a} , b is ${b}"
[a,b]=f1(a)
println "a is NOW ${a} , b is NOW ${b}"
def f1(int x) {
return [a*10,a*20]
}
Run Code Online (Sandbox Code Playgroud) 通常我会看一眼这个事实并接受它为"这就是轮子旋转的方式",但今天我想知道它来自何处:为什么一个函数只有一个返回(参考)值?
为什么不能,函数返回多个值会变得困难或不明智?是因为对象以及您应该如何期望始终以对象的引用形式返回数据包?
如果你看到一个声明函数作为一个契约,它说明了如何调用一个函数,它应该采用哪些参数,以及它具有哪种返回值类型,那么我没有看到背后的逻辑只有一个返回值,因为你可以申请相反的逻辑相反(因此创建了多个返回值的合约).
基于我可以看到的逻辑的唯一原因是,如果一个函数返回多于一个的东西,它还应该操作多于1个的东西超过1个原因,这违背了一个函数应该只做一件事的哲学.如果有一件事是操纵一个对象并返回另一个对象那么它就有意义了,你可以用操纵对象返回一个引用值.
那么为什么存在这种限制呢?
我写了一个java类:
public class Tuple<X, Y> {
public final X x;
public final Y y;
public Tuple(X x, Y y) {
this.x = x;
this.y = y;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我创建这样的函数时:
public Tuple<boolean, String> getResult()
{
try {
if(something.equals(something2))
return new Tuple(true, null);
}
catch (Exception e){
return new Tuple(false, e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下编译错误:
unexpected type
required: reference
found: boolean
Run Code Online (Sandbox Code Playgroud)
我可以做什么?
在使用Java应用程序时,大多数时候我会感到一个问题:为什么Java不支持方法的多个返回值?
我知道设计Java的人一定已经考虑了这个主题,但是在思考自己的时候我没有得到任何答案或特定原因。
我正在从http连接中检索2个字符串.例如名称和描述,并将它们存储在2个不同的数组中.阵列将被我的另一类使用.我创建了两种搜索方法(searchName和searchDesc).一切都工作正常,但我想提高效率,因为我没有这样做.
我想在一个方法中创建一个连接,读取并将内容存储在它们各自的数组中并返回2个数组.
换句话说,我希望应用程序仅通过html代码创建一次连接/读取而不是两次(我当前的代码).我想要一个返回2个值的方法,而不是创建2个方法,每个方法只返回1个值.有可能吗?怎么样?