【问题标题】:How to let method return more than one object?如何让方法返回多个对象?
【发布时间】:2011-09-14 10:49:18
【问题描述】:

这可能是一个非常愚蠢的问题。但是有没有一种方法可以返回多个对象?比如,2 个字符串?

public static String multipleReturnMethod(){

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

   return a;
   return b;
}

可能吗?不可能?您如何使成为可能?

【问题讨论】:

  • 不可能,改用java.util.List<String>
  • 创建另一种返回这些值的类型。 Java 是一种面向对象的语言,但人们喜欢寻找不创建对象的方法。 =D

标签: java methods return


【解决方案1】:

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

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

或者一个列表,或者一个封装了这两个值的类型等等……

您只能从方法中返回单个值,但该值本身可能会提供对多个“子值”的访问。

如果您能提供更多关于您正在尝试做的事情的信息,我们或许可以提供更多帮助。

【讨论】:

  • 如果多个对象的类型相同(如上所述),则此方法有效。在更一般的不同类型的情况下,需要一个包装类。该数组还有一个缺点,即调用者需要知道哪个索引引用特定值(0 = a,1 = b)。
  • @John:这取决于它们是否是具有特定含义的不同值,或者是否真的是“第一个值,第二个值”等。很难知道 OP 真正想要的是什么做。 (“不同的类型”被“封装两个值的类型”所涵盖。)
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    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 的回答)

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        FunctionalJava 为 Product 提供了一个方便的类 P,使这变得简单。 http://functionaljava.googlecode.com/svn/artifacts/3.0/javadoc/fj/P.html

        return P.p(a,b);
        

        【讨论】:

          【解决方案6】:

          返回一个以上的对象是不可能的,永远不会! 解决方案是返回一个包含您要返回的对象的对象。

          【讨论】:

            【解决方案7】:

            如果你有更复杂的例子,你可以使用监听器模式

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

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

            【讨论】:

              【解决方案8】:

              一种方法是将输出对象传递给您的方法,例如以数组列表的形式,因此它将类似于:

              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
              }
              

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

              【讨论】:

              • return output 不会编译。
              • 不仅如此...您正在尝试将 ArrayList 作为字符串返回...public static ArrayList&lt;String&gt; multipleReturnMethod("...")
              • 我的错 - 我不应该匆忙进行复制/粘贴。
              猜你喜欢
              • 2010-10-02
              • 1970-01-01
              • 2014-08-02
              • 2010-10-30
              • 1970-01-01
              • 2020-11-01
              • 2020-03-06
              • 2016-05-08
              • 2012-01-24
              相关资源
              最近更新 更多