Как вернуть несколько типов объектов (String, int, int) в Java, когда я вызываю другой пакет? - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь передать несколько типов объектов (String, int, int) в другой package1 и вернуть этот package1 обратно (String, int, int).Но я хочу сделать это, не импортируя исходный пакет 2 в пакет 1, передав класс.

Метод 1: Передайте список объектов и приведите его обратно в String / int при вызове.(Я читал, что передача объектов является табу и должна проходить либо классы, либо только один определенный тип)

//package1 - cannot import any other packages
public List<Object> returnvalue (String aString, int aInt, int bInt) {
  //Just an example of processed values
  aString = aString + "append"; 
  aInt++;
  bInt = bInt+2;

  List<Object> returnvalue = new ArrayList<>();

  returnvalue.add(aString);
  returnvalue.add(aInt);
  returnvalue.add(bInt);

  return returnvalue;
}

//package2 - can import package1 inside
int aInt = 1;
int bInt = 1;
List<Object> receivevalue = package1.returnvalue("aString",aInt,bInt);
String receivestring = (String)receivevalue.get(0);
String receiveint1 = (int)receivevalue.get(1);
String receiveint2 = (int)receivevalue.get(2);

Method2: передать список строк и преобразовать его внутри метода.(Таким образом, я не передаю объекты)

//package1 - cannot import any other packages
public List<String> returnvalue (String aString, String aInt, String bInt) {
  //Just an example of processed values
  aString = aString + "append";

  int tmpInt = Integer.valueOf(aInt);
  tmpInt++;
  aInt = String.valueOf(tmpInt);

  int tmpInt2 = Integer.valueOf(bInt);
  tmpInt2=tmpInt2-2;
  bInt = String.valueOf(tmpInt2);

  List<String> returnvalue = new ArrayList<>();

  returnvalue.add(aString);
  returnvalue.add(aInt);
  returnvalue.add(bInt);

  return returnvalue;
}

//package2 - can import package1 inside
int aInt = 1;
int bInt = 1;
List<String> receivevalue = package1.returnvalue("aString",aInt,bInt);
String receivestring = receivevalue.get(0);
String receiveint1 = receivevalue.get(1);
String receiveint2 = receivevalue.get(2);

Из того, что я прочитал, большинство, похоже, предлагает создать класс и передать этот класс, чтобы он имел безопасность типов и был бы намного более читабельным.,Однако без вызова package2 в package1 я считаю, что это невозможно?И я хочу сделать это, не импортируя какой-либо класс модели вообще, package1 должен быть полностью независимым.

Мне интересно, какой из них лучший, и есть ли лучший способ сделать то, чего я пытаюсь достичь?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

в package1 создайте класс POJO для хранения ваших значений ввода / вывода, например:

class Data {
    public String s;
    public int a1;
    public int a1;
}

, затем вы можете изменить подпись:

public List<Object> returnvalue (String aString, int aInt, int bInt) 

на

public Data returnValue(Data aData)

ОБНОВЛЕНИЕ

при условии, что у вас есть 2 класса в пакете 1

Data.java:

package package1;

public class Data {
    public String s;
    public int a1;
    public int a2;
}

и Solution.java:

package package1;

public class Solution {
    public Data returnValue(Data input) {
        Data data = new Data();
        data.s = input.s + "append";
        data.a1 = input.a1 + 1;
        data.a2 = input.a2 + 2;

        return data;
    }
}

Вы можете использовать их в packate2 следующим образом App.java :

package package2;

import package1.Data;
import package1.Solution;

public class App {
    public static void main(String[] args) throws Exception {
        Data input = new Data();

        input.s = "ipsum";
        input.a1 = 1;
        input.a2 = 2;

        Solution solution = new Solution();
        Data result = solution.returnValue(input);

        // use result
    }
}
0 голосов
/ 25 сентября 2019

Вы можете определить класс Java, в котором есть все три атрибута (String, int, int), а затем вы можете вернуть его объект.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...