这只是一个奇怪的问题。
代码:
ArrayList<Object> al = new ArrayList<>();
al.add(5);
al.add(5.5);
al.add("abcd");
int a = get(0);
double b = get(1);
String c = get(2);
我知道0
索引等数据类型的索引有int
。
我知道像
这样的演员int a = (int) list.get(0);
但是我们如何编写一个方法get(int index)
,它可以返回任何数据类型并直接分配给变量?
谢谢!
答案 0 :(得分:0)
你可以这样做,但我不确定这是一种推荐的编程方式:
public static <T> T get (List<?> list, int index) {
return (T) list.get (index);
}
答案 1 :(得分:-1)
你想做的是这样的事情:
//TypelessList is a user-created class with custom casting methods
List typeLess = new TypelessList();
int a = list.getInt(0);
double b = list.getDouble(1);
String c = list.getString(2);
但是,不建议这样做,因为它会破坏您正在使用的泛型的目的。铸造也是一个缓慢的操作。 您应该做的是制作更具体的列表,如下所示:
List<Integer> wrappedInts = new ArrayList<Integer>();
wrappedInts.add(Integer.valueOf(5));
int a = wrappedInts.get(0).intValue();
这样就不需要过度投射了。
使用 Integer 类是因为原始类型不能在列表中使用。 参考拆箱以获取更多详细信息。
答案 2 :(得分:-1)
使用instanceof
确定班级。
import java.util.Date;
import java.util.LinkedList;
public class Main
{
static LinkedList list = new LinkedList();
public static void main(String [] args)
{
list.push("String");
list.push(2);
list.push(new Date());
for(Object obj: list)
{
if(obj instanceof String)
System.out.println("String: " + obj);
else if(obj instanceof Integer)
System.out.println("int: " + obj);
else if(obj instanceof Date)
System.out.println("Date: " + obj);
}
}
}