什麼你可以可能逃脫是創建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
將公共部分拉出到一個單獨的方法,並有多個測試重載,調用該單獨的方法,然後執行專門的工作。 –