Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何让方法返回多个对象?_Java_Methods_Return - Fatal编程技术网

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

Java 如何让方法返回多个对象?,java,methods,return,Java,Methods,Return,这可能是一个非常愚蠢的问题。但是有没有一种方法可以返回多个对象呢?比如说,两条线 public static String multipleReturnMethod(){ String a = "a"; String b = "b"; return a; return b; } 可能吗?不可能?您如何使成为可能?您可以返回一个数组 public static String[] multipleReturnMethod(){ String a = "a"

这可能是一个非常愚蠢的问题。但是有没有一种方法可以返回多个对象呢?比如说,两条线

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 };
}
或者列表,或者封装这两个值的类型,等等

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


如果您能提供有关您正在尝试执行的操作的更多信息,我们可能会提供更多帮助。

您可以返回一个数组

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

  • 如果不更改返回对象,则不可能:

  • 为其创建一个类:

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

  • 一种方法是将输出对象传递给您的方法,例如以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
    }
    
    公共静态ArrayList multipleReturnMethod(ArrayList输出){
    字符串a=“a”;
    字符串b=“b”;
    产出.增加(a);
    产出.增加(b);
    返回输出;//实际上不需要
    }
    

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

    一种方法是将输出对象传递给您的方法,例如以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
    }
    
    公共静态ArrayList multipleReturnMethod(ArrayList输出){
    字符串a=“a”;
    字符串b=“b”;
    产出.增加(a);
    产出.增加(b);
    返回输出;//实际上不需要
    }
    

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

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

    FunctionalJava为产品提供了一个方便的类p,使这变得容易。


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

    FunctionalJava为产品提供了一个方便的类p,使这变得容易。


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

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

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

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

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

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

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

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

    正如您所看到的,您可以通过混合或组合类型将结果的任意组合返回给调用者。

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

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

    正如您所见,您可以通过混合或组合类型将结果的任意组合返回给调用者。

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

    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;
    }
    
    publicstaticarraylistmethodb(){
    ArrayList temp=新的ArrayList();
    //工作
    返回温度;
    }
    
    如果它们都是相同类型的对象,那么最简单的方法就是返回该类型对象的数组

    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;
    }
    
    publicstaticarraylistmethodb(){
    ArrayList temp=新的ArrayList();
    //工作
    返回温度;
    }
    
    不可能,请使用
    java.util.List
    创建另一个返回这些值的类型。Java是一种面向对象的语言,但人们喜欢找到不生成对象的方法=不可能,请使用
    java.util.List
    创建另一个返回这些值的类型。Java是一种面向对象的语言,但人们喜欢找到不生成对象的方法=数据如果多个对象的类型相同(如上所述),则此操作有效。在不同类型的更一般情况下,需要一个包装器类。数组还有一个缺点,即调用者需要知道什么索引引用了一个特定的值(0=a,1=b)。@John:这取决于它们是否是具有特定含义的不同值,或者它是否真的是“第一个值,第二个值”等等。很难知道OP真正想做什么。(在“封装两个值的类型”中包含“不同的类型”。)如果多个对象的类型相同(如上所述),则此操作有效。在不同类型的更一般情况下,需要一个包装器类。数组还有一个缺点,即调用者需要知道什么索引引用了一个特定的值(0=a,1=b)。@John:这取决于它们是否是具有特定含义的不同值,或者它是否真的是“第一个值,第二个值”等等。很难知道OP真正想做什么。(不同类型包含在“封装两个值的类型”中)。
    返回输出将不会编译。不仅如此。。。您正在尝试以字符串形式返回ArrayList
    public static ArrayList multipleReturnMethod(“…”)
    My bad-我不应该匆忙进行复制/粘贴。返回的输出将无法编译。不仅如此。。。你正试图重新开始