我试图从类中的方法返回一个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
答案 0 :(得分:4)
一个可能的简单解决方案是创建一个class
成员int
和List<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
,其中包含List
和int
。
下一种可能性是返回Object[]
。这样做的缺点是你失去了类型安全性。
第三种可能性是将列表提供给方法调用并在那里填充并仅返回int
。
答案 3 :(得分:1)
我想到了两个解决方案: