2012-11-15 73 views
8

我用Java编写了一个函数,我希望这个函数返回多个值。除了使用数组和结构,有没有办法返回多个值?在Java中返回多个值

我的代码:

String query40 = "SELECT Good_Name,Quantity,Price from Tbl1 where Good_ID="+x; 
Cursor c = db.rawQuery(query, null); 
if (c!= null && c.moveToFirst()) 
{ 
    GoodNameShow = c.getString(0); 
    QuantityShow = c.getLong(1); 
    GoodUnitPriceShow = c.getLong(2); 
    return GoodNameShow,QuantityShow ,GoodUnitPriceShow ; 
} 
+0

重要的不是“Eclipse”而是语言(Java)。 –

+2

我意识到你的代码是伪Java,但确保你用camelCase命名你的变量(例如'goodNameShow'或'goodUnitPriceShow')。 –

回答

29

在Java中,当你想要一个函数返回多个值,则必须

  • 在对象中嵌入这些值返回
  • 或更改对象这是传递给你的功能

在你的情况,你显然需要定义一个cla SS Show这可能会对领域namequantityprice

public class Show { 
    private String name; 
    private int price; 
    // add other fields, constructor and accessors 
} 

然后改变你的函数

public Show test(){ 
     ... 
     return new Show(GoodNameShow,QuantityShow ,GoodUnitPriceShow) ; 
+1

@estiedi你的意思是'Collection.sort'是不好的风格?如果你试图让那些不懂这门语言最基本事实的人理解它,你就无法做出高效的代码。如果有人不知道接收到的对象可以通过某种方法进行更改,那么他必须在参与专业团队之前学习。 –

+0

语言并没有从CLU的例子中学习,这仍然令人遗憾。 CLU的相关多重赋值是半可疑的('x,y = y,x'),但是多个返回值是**非常有用的('x,y = function(params)')。强制一个包装对象被返回(通常通过类似'class Pair '的“干净”声明)在很多严格的调用下受到惩罚,传递一个对象来保存返回值是非常麻烦的,没有编译器保证这些字段是填充。 – 2015-07-24 17:22:57

+0

@ tgm1024你应该看看Go在哪里机器人返回多个值和多个分配是非常有用的;) –

1

我已经开发了一个非常基本的方法来处理这种情况。

我在字符串中使用了逻辑分隔符

例如,如果你需要在同一个函数返回 1 int值 2.双重价值 3.字符串值

你可以使用一个分隔字符串

例如“ “,”这种字符串通常不会出现在任何地方。

你可以返回由该分离器 “< int值>,。,<双值>,。,<字符串值>”

分隔的所有值的字符串并将其转换为等效类型,其中该函数已被调用通过使用String.split(separtor)[指数]

参考下面的代码说明 -

小号eparator使用=“”

public class TestMultipleReturns{ 

public static void main(String args[]){ 

    String result = getMultipleValues(); 
    int intval = Integer.parseInt(result.split(",.,")[0]); 
    double doubleval = Double.parseDouble(result.split(",.,")[1]);  
    String strval = result.split(",.,")[2]; 
} 

public static String getMultipleValues(){ 

    int intval = 231;//some int value  
    double doubleval = 3.14;//some double val 
    String strval = "hello";//some String val 

    return(intval+",.,"+doubleval+",.,"+strval); 

} 
} 

这种方法可以作为快捷方式,当你不想增加班级数量只有函数返回

这要看情况来形势哪种方法采取。

+1

虽然这个建议并不增加类的数量,但这是一个可怕的方法,原因很多:您创建多个不必要的对象( 'StringBuilder','String's),它比实用程序类的单个实例要昂贵得多。检索值的努力是不合理的,需要不必要的代码并对性能有显着的影响。正如你已经注意到的那样,分隔符不能出现在字符串中,这实际上是一个不合理的假设。 –

+3

我低估了,所以人们从来没有真正使用过这种方法。这对性能和可读性是不利的,而且数据库永远不知道从这样的回报中期望什么。 – Panthro

+1

@still_learning - 就性能而言,我知道这种方法非常糟糕,但这只是我开始编程时所做的练习的一部分。 我主要在julia和matlab上工作,在那里你可以返回多个vals,比如返回var1,var2等等......所以当我用JAVA开始的时候,我刚刚成为练习的一部分。我实际上认为它会工作得很好,但后来我觉得它表现非常糟糕。 –