[英]How to let method return more than one object?
这可能是一个非常愚蠢的问题。 但是,有一种方法可以返回多个对象的方法吗? 比如说2个弦?
public static String multipleReturnMethod(){
String a = "a";
String b = "b";
return a;
return b;
}
可能? 不可能? 您如何使其成为可能?
您可以返回一个数组...
public static String[] multipleReturnMethod(){
String a = "a";
String b = "b";
return new String[] { a, b };
}
或列表,或封装两个值的类型,等等。
您只能从方法中返回一个值,但是该值本身可以访问多个“子值”。
如果您可以提供有关您要做什么的更多信息,我们可能会提供更多帮助。
如果不更改返回对象,则不可能:
为此创建一个类:
class Strings { String a, b; Strings(String a, String b) { this.a = a; this.b = b; } } public static Strings multipleReturnMethod(){ return new Strings("a", "b"); }
或返回一个数组
public static String[] multipleReturnMethod(){ return new String[] { a, b }; }
如果要保留签名,可以使用定义的定界符将字符串连接起来:
public static final String DELIMITER = "\t"; // or something else
// not used in strings
public static String multipleReturnMethod(){
String a = "a";
String b = "b";
return a + DELIMITER + b;
}
(尽管我更喜欢更改签名并返回数组或值的集合,请参见乔恩的答案)
如果它们都是相同类型的对象,那么最简单的方法是只返回该类型对象的数组
public static String[] methodA(){
String[] temp = new String[5];
// do work
return temp;
}
如果您希望返回不同类型的对象,则返回对象的ArrayList。
public static ArrayList<Object> methodB(){
ArrayList<Object> temp = new ArrayList<Object>();
// do work
return temp;
}
在Java中是不可能的。 您必须围绕要返回的元素创建一个包装器类,并返回该单个元素并包含要返回的所有内容。
FunctionalJava为产品提供了一个方便的P类,可以简化此过程。 http://functionaljava.googlecode.com/svn/artifacts/3.0/javadoc/fj/P.html
return P.p(a,b);
不可能返回一个以上的对象,永远! 解决方案是返回一个包含要返回的对象的对象。
如果您有一个更复杂的示例,则可以使用侦听器模式
interface ResultListener {
void resultOne(String text);
void resultTwo(String text, int number);
}
public static void multipleReturnMethod(ResultListener result){
result.resultOne("a");
result.resultOne("b");
result.resultTwo("C", 1);
}
如您所见,您可以将结果的任何组合以类型的混合或组合返回给调用方。
一种方法是将输出对象传递给您的方法,例如以arraylist的形式,因此它将类似于:
public static ArrayList<String> multipleReturnMethod(ArrayList<String> output) {
String a = "a";
String b = "b";
output.add(a);
output.add(b);
return output; //not really necessary
}
当然,必须在方法之外创建输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.