如何从Java中的方法返回多个值

时间:2019-04-30 10:43:23

标签: java return-value

我用Java编写了一个返回2个值的方法。第一个为int类型的结果计数,第二个为方法成功/错误布尔类型的结果计数。 如何返回两个值?因此,如果该方法成功,则只能继续。

示例代码:

public static void main(String args[])
{
    int count = 0;
    boolean status = false;
    //count = retrieveData(); Current code working but captures only 1 values at a time i.e. Count not the status

    /* Expected Code

    if (status == true)  // where status and count is returned from retrieveData method
    {
        count = retrieveData();
        System.out.println("Status is true so can proceed");
    }

    else
        System.out.println("Status is not true so don't proceed");
    */
}





public static int retrieveData() throws  Exception 
    {

        boolean success = false;
        String query = "SELECT Count(1) FROM Account";
        int totalCount=0;
        ResultSet rsRetrieve = null;
            Statement stmt = null;
            stmt = conn.createStatement();
            rsRetrieve = stmt.executeQuery(query);
            while (rsRetrieve.next())
            {
                totalCount= rsRetrieve.getInt(1);
                System.out.println("totalCount : "+totalCount);
            }


        success = true;
        return totalCount; // current working code but returns only 1 value i.e. Count not status

        /*   Expected

        return success + totalCount

        */
    }

6 个答案:

答案 0 :(得分:2)

您可以如下创建自定义Java对象

public class Result {

   private boolean success;
   private int totalResults;

   public Result(boolean success, int totalResults){
    this.success = success;
    this.totalResults = totalResults;
   }
   public boolean getSuccess(){
     return this.success;
   }

   public boolean getTotalResults(){
       return this.totalResults;
   }

}

答案 1 :(得分:2)

从一种方法中重新调整多个值的方法有很多,我使用的一些最佳方法是:

1-为要返回的数据类型创建类,例如,您要返回两个String生成类,如下所示:

public class myType {
            String a;
            String b;

            public String getA() {
                return a;
            }

            public void setA(String _a) {
                a = _a;
            }
            //And All other geter setters
        }

并使方法的返回类型返回上述类。

2-具有键值对的返回映射
3-创建接口并从要返回值的位置调用Abstract方法(必须在要接收值的类中实现接口) 希望这会给您一个粗略的思路,以搬家

答案 2 :(得分:0)

我建议您坚持使用当前的通用方法,并且尝试从您的方法中返回两条信息。您的方法签名会引发异常,一种可能的处理方法是在出现问题时让您的方法引发异常。否则,这意味着count查询确实已运行,并且将返回一些count。但是,您可能应该在JDBC代码周围有一个try catch块:

public static int retrieveData(Connection conn) throws Exception {
    Statement stmt = null;
    int totalCount = 0;

    try {
        String query = "SELECT COUNT(*) FROM Account";

        ResultSet rsRetrieve;
        stmt = conn.createStatement();
        rsRetrieve = stmt.executeQuery(query);

        if (rsRetrieve.next()) {
            totalCount = rsRetrieve.getInt(1);
            System.out.println("totalCount : " + totalCount);
        }
    }
    catch (SQLException e) {
        System.out.println(e.getMessage());
        threw new Exception("something went wrong");
    }
    finally {
        if (stmt != null) {
            stmt.close();
        }

        if (conn != null) {
            conn.close();
        }

    }

    return totalCount;
}

因此,此处使用的模式是:如果出现问题,则没有计数,并且调用方将获得异常。否则,如果没有异常发生,那么将返回一些计数。

答案 3 :(得分:0)

您不能,但是可以创建一个用于容纳多个对象的Bean类。

如果这是用于程序错误处理,则可能需要查看Optional(标准)或Either(vavr)来处理多个结果

答案 4 :(得分:0)

您可以使用Java Pair

import javafx.util.Pair;

public Pair retrieveData(int a, int b) {
   return new Pair(a, b);
}

Pair p = retrieveData(1,2);
int a = p.getKey();     // 1
int b = p.getValue();   // 2

答案 5 :(得分:0)

我想使用<em>模拟出指针。像C ++ any[1]和C#*p

out

其他样品,能量的:

boolean[] p_status = new boolean[1];
int count = retrieveData(p_status);
boolean status = p_status[0];