当我调用不同的包时,如何在Java中返回多个对象类型(String,int,int)?

问题描述 投票:0回答:2

我正在尝试将多个对象类型(String,int,int)传递给另一个package1,并让该package1返回(String,int,int)。但是我想通过传递类而不将原始package2导入package1来执行此操作。

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

从Ive阅读的内容来看,大多数人似乎建议创建一个类并传递该类,以使其具有类型安全性,并且可读性更高。但是,如果不将package2调用到package1中,我相信这是不可能的吗?而且我想这样做而不导入任何模型类,package1必须完全独立。

我想知道哪种方法最好,是否有更好的方法来实现我想要达到的目标?

java
2个回答
0
投票

您可以定义一个Java类,该类中具有所有三个(String,int,int)属性,然后可以返回它的对象。希望对您有所帮助。


0
投票

在package1中创建一个POJO类来保存您的输入/输出值e.g:

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)

UPDATE

假设您在package1中有2个课程

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 } }
© www.soinside.com 2019 - 2024. All rights reserved.