有没有办法用泛型/动态返回类型编写方法?

时间:2017-02-08 22:47:45

标签: java generics return-type

这只是一个奇怪的问题。

代码:

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),它可以返回任何数据类型并直接分配给变量?

谢谢!

3 个答案:

答案 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);
        }
    }
}