0

我正在尝试从类的方法中返回一个 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

4

4 回答 4

4

一个可能的简单解决方案是创建一个classthat hasintList<T>members 并返回 that 的一个实例class


可能相关:Java 中的 C++ Pair<L,R> 等价物是什么?例如通用对类的实现。

于 2013-07-24T10:11:13.323 回答
2

You can use a 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); }
}

Then define your method as follows:

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

In the caller side:

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

If you have the Guava library you can use a Pair class from there.

If you want to use a map, you will have to do a downcast on its values:

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

In the caller side:

Map<String, Object> map = myMethod();
List mainList = (List) map.get("list");
int count = (Integer) map.get("count");
于 2013-07-24T10:12:30.893 回答
1

有几种可能性:

首先,您可以创建一个class包含 aListint.

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

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

于 2013-07-24T10:13:41.337 回答
1

我想到了两个解决方案:

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