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

Java 有没有办法用泛型/动态返回类型编写方法?,java,generics,return-type,Java,Generics,Return Type,这只是一个奇怪的问题 代码: 但是,我们如何编写一个方法get(int index),它可以返回任何数据类型并直接分配给变量 谢谢大家! 您希望做的事情如下所示: //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 =

这只是一个奇怪的问题

代码:

但是,我们如何编写一个方法
get(int index)
,它可以返回任何数据类型并直接分配给变量


谢谢大家!

您希望做的事情如下所示:

//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();
但是,不建议这样做,因为这样做会破坏您正在使用的泛型的目的。铸造也是一种缓慢的操作。 你应该做的是列出更具体的清单,比如:

//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();
List wrappedInts=new ArrayList();
wrappedInts.add(整数.valueOf(5));
int a=wrappedInts.get(0.intValue();
这样,就不需要过度铸造

之所以使用Integer类,是因为不能在列表中使用基元类型。有关更多详细信息,请参考取消装箱。

您可以这样做,但我不确定这是否是一种推荐的编程方式:

  public static <T> T get (List<?> list, int index) {
    return (T) list.get (index);
  }
publicstatict-get(列表,int索引){
return(T)list.get(index);
}

使用
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);
        }
    }
}

不,你不能。与其拥有一个包含不同类对象的
列表
,不如拥有一个包含不同类字段的类。像这样的混合类型通常是一种明显的代码气味。那些必须维护你的代码的人会带着邪恶的意图来到你家——实际上他们可能只是正确地重写了代码,然后在他们的呼吸下诅咒你的名字。@JimGarrison这只是一个奇怪的问题,我在问题的开头已经说过了,但是怎么做呢
T
是否获取类型?@psh Google“类型推断”。但如果存在继承,它将失败。即使它满足了他们的要求,这也是一个糟糕的解决方案。