I am trying to return an int and a list from a method from a class. but i cant make object of that class. so how should i do it.
i try to do this :
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;
but when i use it in another class -
if (listOfObj != null && listOfObj.size() > 0) {
List mainList = promoData.get(0); --- gives error
count = (Integer) promoData.get(1);
}
so i tried this ---
if (listOfObj != null && listOfObj.size() > 0) {
Map promoData = (Map) listOfObj;
List mainList = (List) promoData.get(0);
count = (Integer) promoData.get(1);
}
but it still gives error when i hit the application.
error : java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Map
解决方案
You can use a pair class
public class Pair {
public final X first;
public final Y second;
public Pair(X first, Y second) { this.first = first; this.second = second; }
public static of(XX xx, YY yy) { return new Pair(xx, yy); }
}
Then define your method as follows:
public Pair myMethod() {
List someList = ...;
int someInt = ....;
...
return Pair.of(someList, someInt);
}
In the caller side:
Pair 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 myMethod() {
List someList = ...;
int someInt = ....;
...
Map map = new HashMap();
map.put("list", someList);
map.put("count", someInt);
return map;
}
In the caller side:
Map map = myMethod();
List mainList = (List) map.get("list");
int count = (Integer) map.get("count");