如何从java中的方法返回Integer或int和列表?

时间:2013-07-24 10:08:49

标签: java list methods int

我试图从类中的方法返回一个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 个答案:

答案 0 :(得分:4)

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


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

答案 1 :(得分:2)

您可以使用配对类

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

答案 2 :(得分:1)

有几种可能性:

首先,您可以创建一个class,其中包含Listint

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

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

答案 3 :(得分:1)

我想到了两个解决方案:

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