有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

泛型Java模板调用运行时推断

我在学习Java模板。在编译泛型时,我希望运行时能够对类型进行推断,从而相应地调用

似乎并没有。也就是说,推断是基于编译时类型推断的,尽管模板本身是编译的

测试界面:

interface op {
    public Object Do(Object o);
    public Class getClass1();
    public Object getTest();
}

接口实现

class intop implements op{
    public Object Do(Object o) {
        return (Integer) o;
    }

    public Class getClass1() {
        return Integer.class;
    }
    public Object getTest() {
        return new Integer(1);
    }
}
class strop implements op{
    public Object Do(Object o) {
        return (String) o;
    }

    public Class getClass1() {
        return String.class;
    }

    public Object getTest() {
        return "Test";
    }
}

模板及;特殊化

class Utils {
    public static void performOp(Integer i) {
        System.out.println("Interger Object :" + i);
    }

    public static void performOp(String s) {
        System.out.println("String object : " + s);
    }

    public static <T> void performOp(T o) {
        System.out.println("Generic Object :" + o.toString());
    }
}

测试

public class GenMethod {
    public static void main(String args[]) {
        Utils.performOp(1);
        Utils.performOp("Test");
        Utils u = new Utils();
        Integer i = 4;
        Object o = i;
        ArrayList<op> a = new ArrayList<op>();
        a.add(new intop());
        a.add(new strop());

        Random rn = new Random();
        op b = a.get(rn.nextInt(2));

        Utils.performOp(b.getClass1().cast(b.getTest()));
        Utils.performOp(u);
    }
}

我希望输出类似于:

Interger Object :1
String object : Test
Interger Object :1
Generic Object :Utils@64c3c749

但事实是:

Interger Object :1
String object : Test
Generic Object :1
Generic Object :Utils@3ce53108

有没有一种方法可以基于运行时类型推断正确地进行专门的模板方法调用

附言:我想避免使用“instanceof”如果尽可能多地使用其他人的梯子


共 (0) 个答案