这是一个逻辑问题,而不是特定于代码,我有二十个函数,每个函数计算两个我感兴趣的值。但是我只能从函数返回一个值。现在我的另一个选择是创建一个类并使用全局变量实现setter和getter。我想知道这是否是一种可行且推荐的方式?或者有更好的方法来做到这一点?
答案 0 :(得分:3)
不要使用全局变量!使用一些将您的数据作为私有文件的类,并为其提供getter。喜欢
class Pair<A,B> {
final A one;
final B two;
public Pair(A fst, B snd) { one = fst; two = snd; }
public A getFst() { return one; }
public B getSnd() { return two; }
}
然后你可以在其他地方说出类似的话:
return new Pair(42, "a result");
答案 1 :(得分:1)
从您的函数中返回Collection
,其中包含您感兴趣的值。
答案 2 :(得分:1)
您必须返回List
或array
。
但如果return
类型不同,您可以创建自定义类并将其用作返回类型。
实施例
public class Result {
private String name;
private int age;
// getters and setters;
}
现在你可以有一些像下面这样的东西
public static Result getInfo(){
Result result=new Result();
result.setName("name");
result.setAge(10);
return result;//now you can have String and int values return from the method
}
答案 3 :(得分:1)
取决于问题。但有两种解决方案:
答案 4 :(得分:1)
你可以这样做
long[] function() {
long[] ret = { a, b };
return ret;
}
或
long[] a = { 0 }, b = { 0 };
void function(long[] a, long[] b) {
a[0] = ...
b[0] = ...
或向对象添加属性。
private long a,b;
void function() {
a = ...
b = ...
}
在最后一种情况下,你可以估价。
class Results {
public final long a;
public final Date b; // note: Date is not immutable.
// add constructor
}
public Results function() {
long a = ...
Date b = ...
return new Results(a, b);
}
答案 5 :(得分:1)
我认为制作记录类是最合适的。
public class Record {
public final int a;
public final int b;
public Record(final int a, final int b) {
this.a = a;
this.b = b;
}
}
然后您的函数可以返回Record
类型,您可以使用record.a
和record.b
来访问它。
这也是为数public
个变量而且没有任何getter和setter可以证明其合理性的少数情况之一。
更新:已实施建议的更改,现在所有内容都为final
,这意味着当您将其恢复时无法修改Record
,这似乎符合期望。您仅想要结果并使用它们。
答案 6 :(得分:1)
有很多方法:集合,数组...... 在我看来,唯一的方法是用这些值定义一个类。 如果您不需要调节内容的可见性,则不需要getter和setter方法
class MyReturnValue {
public int a;
public int b;
}
你的代码中的:
...
MyReturnValue result=new MyReturnValue();
result.a=5;
result.b=6;
return result;
答案 7 :(得分:1)
最好创建一个类并使用全局变量实现setter和getter而不是Return Collection,这取决于你的用途。
答案 8 :(得分:1)
采用带有通用辅助函数的varargs
来解决返回变量限制的数量怎么样:在这个解决方案中,每当返回变量的数量发生变化时,我们就不必声明新的类了。
class Results
{
private final Object[] returnedObj;
public Results(Object... returnedObj)
{
this.returnedObj = returnedObj;
}
public <E> E getResult(int index)
{
return (E)returnedObj[index];
}
}
测试案例
public static Results Test()
{
return new Results(12, "ABCD EFG", 12.45);
// or return larger number of value
}
//// And then returning the result
Results result = Test();
String x = result.<String>getResult(1);
System.out.println(x); // prints "ABCD EFG"
答案 9 :(得分:0)
如果您确定“〜”不会出现在结果中,您甚至可以返回由特殊字符分隔的值,如“〜”。