什么你可以可能逃脱是创建T
类型映射到(unary?)function。然后,在test
方法中,您可以查找类型T
。如果一个函数是registerede,适用于:
public class Demo {
private static final Map<Class<?>, UnaryOperator<?>> typeFuncs = new HashMap<>();
static {{
addTypeFunc(String.class, (String s) -> s); // Anonymous function.
addTypeFunc(Integer.class, Demo::workInteger); // Function reference.
}}
private static <T> void addTypeFunc(Class<T> type, UnaryOperator<T> func) {
typeFuncs.put(type, func);
}
private static Integer workInteger(Integer i) {
return i;
}
public <T> T test(T t) {
// common work to do !!
// .....
T result = null;
UnaryOperator<T> operator = (UnaryOperator<T>) typeFuncs.get(t.getClass());
if (operator != null) {
result = operator.apply(t);
}
return result;
}
}
请注意,test
投(UnaryOperator<T>)
仅仅是安全的,因为我们在typeFuncs
地图键和值类型之间的关系的总量控制。
你不能做这样的在Java中任何东西。在编译时决定选择哪种方法的重载,而不是运行时。 –
我该如何实现? Test()需要处理不同的参数类型,并且需要先在该函数中完成一些常见工作,我只是想将通用部分提取到Test()中。 – TAW8750
将公共部分拉出到一个单独的方法,并有多个测试重载,调用该单独的方法,然后执行专门的工作。 –