如何让方法返回多个对象?

时间:2011-09-14 10:49:18

标签: java methods return

这可能是一个非常愚蠢的问题。但有一种方法可以返回多个对象吗?比方说,2 Strings?

public static String multipleReturnMethod(){

   String a = "a";
   String b = "b";

   return a;
   return b;
}

可能?不可能?你如何使成为可能?

8 个答案:

答案 0 :(得分:6)

你可以返回一个数组......

public static String[] multipleReturnMethod(){    
   String a = "a";
   String b = "b";
   return new String[] { a, b };
}

或列表,或封装这两个值的类型等......

您只能从方法返回单个值,但该值本身可以访问多个“子值”。

如果您可以提供有关您尝试做的更多信息,我们可能会提供更多帮助。

答案 1 :(得分:3)

不改变返回对象是不可能的:

  1. 为它创建一个类:

    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");
    }
    
  2. 或者返回一个数组

    public static String[] multipleReturnMethod(){
        return new String[] { a, b };
    }
    

答案 2 :(得分:1)

如果要保留签名,可以使用定义的分隔符连接字符串:

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;
}

(虽然我更喜欢更改签名并返回数组或值集合,但请参阅Jon的回答)

答案 3 :(得分:1)

如果它们都是相同类型的对象,那么最简单的方法就是返回该类型对象的数组

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;
}

答案 4 :(得分:0)

在Java中是不可能的。您必须围绕要返回的元素创建一个包装类,并返回该单个元素并包含您想要返回的所有内容。

FunctionalJava有一个方便的产品类P,使这很容易。 http://functionaljava.googlecode.com/svn/artifacts/3.0/javadoc/fj/P.html

return P.p(a,b);

答案 5 :(得分:0)

永远不可能返回多个对象! 解决方案是返回一个包含要返回的对象的对象。

答案 6 :(得分:0)

如果您有一个更复杂的示例,则可以使用侦听器模式

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);
}

如您所见,您可以使用混合或类型组合将任何结果组合返回给调用者。

答案 7 :(得分:-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
}

当然必须在方法之外创建输出。