如何在java中返回多个整数?
我有一个方法,它将返回一个错误代码(int)和一个结果(int)。如果错误代码为0,则结果有效。 在C++中,这可能是:如何在java中返回多个整数?,java,reference,Java,Reference,我有一个方法,它将返回一个错误代码(int)和一个结果(int)。如果错误代码为0,则结果有效。 在C++中,这可能是: int method(int& result); Java通过引用调用,因此如果我们更改方法中的对象,则调用方可以看到更改。但是,int不是一个类,所以我不能在java中这样做: int method(int result); 整数和Long在Java中是不可变的,因此如果我这样做,调用方将看不到更改: Integer method(Integer result)
int method(int& result);
Java通过引用调用,因此如果我们更改方法中的对象,则调用方可以看到更改。但是,int不是一个类,所以我不能在java中这样做:
int method(int result);
整数和Long在Java中是不可变的,因此如果我这样做,调用方将看不到更改:
Integer method(Integer result);
将结果包装到包装器类中即可!但是,这并不是那么简单
我最近用C++工作了,最近搬到了java,这让我很烦!
有谁能提供解决方案吗
=================================
总之,有以下流动解决方案:
int method(int[] result) {
result[0] = 1; // set result[0] as your out value
// etc.
}
使用数组创建一个指向单个int的“人工引用”。您需要包装这些值,这是正确的。如果对<代码>方法< /代码>的调用不会太频繁,请考虑抛出异常来报告失败,否则将退出。这将是最具Java风格的方法。我也在C++代码中使用这个模式(我不喜欢用相同的方法输出参数和返回值,除非有其他的压力要求)。 然而,性能有时需要您使用的更C-system-call-ish风格。在这种情况下,我建议您构造一个结果类型和一个可以设置其值的错误类型
另一个要考虑的是有一个通用的(读取的模板)类,名为“代码> Tootuple < /代码>,您可以使用它来传递对值。我发现,在Java中,我做了很多成对传递,尽管这可能是我个人风格的衍生
方法不能返回多个整数。您可以做的是:- 创建一个包含2个整型字段的新对象,并让您的方法返回该对象的一个实例(基本上是一个包装器)
- 使您的方法返回2个整数的数组(或将其作为参数)
- 使您的方法返回形式为
的字符串变量。然后可以使用从字符串中获取数字并将其解析回整数,
- 使您的方法抛出异常并返回数字
public class ResultData {
private int result;
private int errorCode;
public ResultData(int errorCode, int result) {
this.result = result;
this.errorCode = errorCode;
}
// Getters...
}
然后,您的方法变成:
public ResultData method() {
// Do stuff
return new ResultData(error, result);
}
或者,正如其他答案所建议的那样,使用异常来表示是否发生了错误,这样,如果方法返回结果,您就可以始终确保它是有效的。捕获异常表示发生了错误,您可以用处理错误代码的方式来处理它。有两种方法来处理该场景:- 1.为错误代码指定一个特殊值,以将其与结果值区分开来(如果可能的话)。例如,如果元素不在列表中,java的ArrayList中的indexOf()方法返回-1,否则返回正索引。 2.对错误条件使用异常,并始终将返回值视为正确结果。也就是说,如果方法返回时没有任何异常,则假定退出代码为0,并将返回值存储到结果中
创建一个自定义对象来存储结果和退出代码可能有些过分。返回错误代码在Java中不是一个好做法。而是使用异常。。。和多重值列表
List<Integer> method(Parameter... paramteters)
{
List<Integer> listOfValues = ...
//some calculations
if(errorCondition) throw new SomeException();
//more calculations, if needed
return listOfValues;
}
列表方法(参数…参数)
{
listOfValues=。。。
//一些计算
如果(errorCondition)抛出新的SomeException();
//如果需要,请进行更多计算
返回值列表;
}
在您的情况下,如果出现错误,请抛出相应的异常。在C++中也有例外。
其他任何东西都是有效的结果
但是,请回答有关如何返回多个值的问题 我在许多地方使用的一种方法是使用侦听器接口
interface ErrorOrResult {
void onError(int error);
void onResult(int result);
}
a.method(errorOrResultImpl); // can use an anonymous implementation here.
如您所见,不同类型的结果可以使用各种参数调用任意次数
可以返回包含两个字段的对象。这是最面向对象的方式 如果每次都创建一个对象让您感到不安,您可以将一个对象作为参数传递。 最简单的方法是重复使用的
int[]
int[] results = { 0, 0 };
a.method(results);
另一种选择是返回一个长的
long result = a.method();
// split into two int values.
或者使方法有状态
int error = a.method();
int result = a.methodResult();
或者您可以像Collections.binarySearch一样使用符号
int errorOrResult = a.method();
if (errorOresult < 0)
int error = ~errorOrResult;
else
int result = errorOrResult;
int errorresult=a.method();
如果(ErrorResult<0)
int error=~errorresult;
其他的
int结果=错误或结果;
考虑到有这么多备选方案,可能需要一段时间才能允许多个返回值。返回一个包含两个整数的对象,例如使用commons lang v3
Pair方法(){
返回对(a,b)
}
库中有一个组件。因为它是可变的,所以您可以通过引用传递它。首先,一个int
错误代码?一般认为Java语言很差。异常是常见的(但执行时很慢)。如果它实际上很常见,并且/或者性能很关键,那么返回一些有意义的内容。也许是一个不错的新[2004]枚举
一般来说,如何返回多个值。您可以破解它并使用AtomicInteger
或类似工具。请不要使用数组
最好返回一个有意义的(可能是不可变的)对象<代码>对不是一个平均值
Pair<Integer, Integer> method(){
return Pair.of(a,b)
}