Вернуть несколько значений в 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 ;
}
 Denys Séguret15 нояб. 2012 г., 09:02
Что не важно "Затмение" но язык (ява).
 Duncan Jones15 нояб. 2012 г., 09:11
Я понимаю, что ваш код псевдо-Java, но убедитесь, что вы называете свои переменные с помощью camelCase (например,goodNameShow или жеgoodUnitPriceShow).

Ответы на вопрос(2)

Решение Вопроса

В Java, когда вы хотите, чтобы функция возвращала несколько значений, вы должны

внедрить эти значения в объект, который вы возвращаетеили измените объект, который передается вашей функции

В вашем случае вам явно необходимо определить классShow которые могут иметь поля,namequantity а также :price

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

затем измените свою функцию на

 public  Show  test(){
      ...
      return new Show(GoodNameShow,QuantityShow ,GoodUnitPriceShow) ;
 Denys Séguret24 июл. 2015 г., 19:48
@ tgm1024 Вы должны взглянуть на Go, где бот, возвращающий несколько значений и несколько назначений, очень полезен;)
 Denys Séguret15 нояб. 2012 г., 15:05
@estiedi Вы имеете в виду, чтоCollection.sort плохой стиль? Вы можете'сделать эффективный код, если вы пытаетесь сделать его понятным для людей, которые неНе знаю самых основных фактов языка. Если кто-то неЕсли вы знаете, что полученный объект может быть изменен каким-либо методом, он должен научиться, прежде чем участвовать в профессиональной команде.
 user422924524 июл. 2015 г., 19:22
Это'все еще прискорбно, что языки неучиться на примере CLU. CLU»Связанное множественное назначение имеет сомнительное использование (x,y = y,x), но несколько возвращаемых значенийочень полезно (x,y = function(params)). Принудительное возвращение объекта переноса (часточистый» декларации, похожие наclass Pair) имеет штраф при очень многих жестких вызовах, и передача объекта для хранения возвращаемых значений ужасно грязна без гарантии компилятора, что поля заполнены.

Я разработал очень простой подход к решению подобных ситуаций.

Я использовал логикуSeperator в строках.

Например, если вам нужно вернуть в той же функции 1. int value 2. double value 3. String value

Вы могли бы использоватьразделительная строка

Например ",.,» этот вид строки вообще не появится нигде.

Вы можете вернуть строку, состоящую из всех значений, разделенных этим разделителем "< int value>,., < двойное значение>,., < Строковое значение> "

и преобразовать в эквивалентные типы, где функция была вызвана с помощьюString.split (separtor) [индекс]

Обратитесь к следующему коду для объяснения -

разделитель используется = ",.,»

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

 }
}

Этот подход можно использовать как ярлык, если вы не хотите увеличивать количество классов только для возвратов функций

Это зависит от ситуации к ситуации, какой подход принять.

 Panthro23 нояб. 2014 г., 13:34
Я понизил голосование, чтобы люди никогда не использовали этот подход. Это'Это плохо сказывается на производительности и удобочитаемости, и клиент никогда не знает, чего ожидать от такого возврата.
 still_learning25 авг. 2014 г., 14:51
Хотя это предложение не увеличивает количество классов, это ужасный подход по многим причинам: вы создаете несколько ненужных объектов (,StringBuilderStrings) которые намного дороже, чем один экземпляр служебного класса. Усилия по извлечению значений неоправданно велики, требуют ненужного кода и заметно влияют на производительность. Как вы уже заметили, разделитель не должен появляться в строке, и это обычно неоправданное предположение.
 Jay Dharmendra Solanki24 нояб. 2014 г., 15:16
@still_learning - я знаю, что этот подход очень плох с точки зрения производительности, но это была лишь часть практики, которую я выполнял, когда начинал программировать. В основном я работал над julia и matlab, где вы можете возвращать несколько значений val, например, возвращать var1, var2 и т.д. Я действительно думал, что это будет работать хорошо, но потом я почувствовал, что это дает очень плохую производительность.

Ваш ответ на вопрос