【问题标题】:How to return an Integer or int and a list from a method in java?如何从 java 中的方法返回 Integer 或 int 和列表?
【发布时间】:2013-07-23 17:57:28
【问题描述】:

我正在尝试从类的方法中返回一个 int 和一个列表。但我不能成为那个班级的对象。那我该怎么做呢。

我尝试这样做:

        List listofObj = new ArrayList();
        List list1 = some code that i can't share;
        Integer total = some integer value;

        listOfObj.add((List) list1 );
        listOfObj.add((Integer) total);

        return listofObj;

但是当我在另一个类中使用它时-

        if (listOfObj != null && listOfObj.size() > 0) {

            List mainList = promoData.get(0); --- gives error
        count = (Integer) promoData.get(1);
        }

所以我尝试了这个---

        if (listOfObj != null && listOfObj.size() > 0) {
            Map promoData = (Map) listOfObj;
            List mainList = (List) promoData.get(0);
            count = (Integer) promoData.get(1);
        }

但是当我点击应用程序时它仍然会出错。

错误:java.lang.ClassCastException:java.util.ArrayList 无法转换为 java.util.Map

【问题讨论】:

  • "给出错误" --> 错误信息总是包含有价值的信息。永远不要忘记发布它。
  • listOfObj 是一个什么样的ArrayList?

标签: java list methods int


【解决方案1】:

一个可能的简单解决方案是创建一个具有intList<T> 成员的class,并返回该class 的一个实例。


可能相关:What is the equivalent of the C++ Pair<L,R> in Java? 例如泛型对类的实现。

【讨论】:

    【解决方案2】:

    你可以使用pair class

    public class Pair<X,Y> {
       public final X first;
       public final Y second;
    
       public Pair(X first, Y second) { this.first = first; this.second = second; }
    
       public static<XX,YY> of(XX xx, YY yy) { return new Pair<XX,YY>(xx, yy); }
    }
    

    然后定义你的方法如下:

     public Pair<List, Integer> myMethod() { 
        List someList = ...;
        int someInt = ....;
        ...
        return Pair.of(someList, someInt); 
     }
    

    在调用方:

    Pair<List, Integer> pair = myMethod();
    List mainList = pair.first;
    int count = pair.second;
    

    如果您有 Guava 库,则可以从那里使用 Pair 类。

    如果您想使用地图,则必须对其值进行向下转换:

    public Map<String, Object> myMethod() { 
      List someList = ...;
      int someInt = ....;
      ...
      Map<String, Object> map = new HashMap<String, Object>();
      map.put("list", someList);
      map.put("count", someInt);
      return map;
    }
    

    在调用方:

    Map<String, Object> map = myMethod();
    List mainList = (List) map.get("list");
    int count = (Integer) map.get("count");
    

    【讨论】:

    • 我可以用地图代替吗?如果是的话,你能建议怎么做。谢谢
    • 更新了答案。请再看一看。
    【解决方案3】:

    有几种可能:

    首先您可以创建一个包含Listintclass

    下一个可能性是返回Object[]。这样做的缺点是你失去了类型安全性。

    第三种可能性是将列表提供到方法调用中并在那里填充,只返回int

    【讨论】:

      【解决方案4】:

      我想到的两个解决方案:

      1. 创建一个具有 int 和 ArrayList 的类并返回该类的实例。我会推荐这个。
      2. 在您的方法之外初始化 ArrayList 并将其作为参数发送。该方法必须只返回 int 值,因为对 ArrayList 所做的更改将在您的方法之外看到。

      【讨论】:

        猜你喜欢
        • 2014-11-17
        • 2017-08-25
        • 1970-01-01
        • 2020-11-08
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多