我正在学习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'尽可能地爬梯子。