Java模板调用 - 运行时扣除

时间:2015-10-30 07:44:53

标签: java generics

我正在学习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";
    }
}

模板& Specilizations

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

有没有办法根据运行时类型推导正确地进行专门的模板方法调用?

PS:我想避免'instanceof'和&amp; 'if..else'尽可能地爬梯子。

0 个答案:

没有答案