【发布时间】:2021-04-28 06:08:47
【问题描述】:
我有这几行代码。
private void DoSomethingOnThePage(int pageNo){
List<T> result = null;
if(pageNo == 1)
result = Checker.Load(input, pageNo, CheckResultA.class);
else if(pageNo == 2)
result = Checker.Load(input, pageNo, CheckResultB.class);
else if(pageNo == 3)
result = Checker.Load(input, pageNo, CheckResultC.class);
else if(pageNo == 4)
result = Checker.Load(input, pageNo, CheckResultD.class);
// do something else with the result ....
}
我正在尝试为这些条件提取一种方法,使其成为这样。 这样我就可以有一个更清晰的视图来查看我的代码中的工作流程。
private java.lang.Class<? extends T> GetClassTypeByPageNo(int pageNo){
if(pageNo == 1)
return CheckResultA.class;
else if(pageNo == 2)
return CheckResultB.class;
else if(pageNo == 3)
return CheckResultC.class
else if(pageNo == 4)
return CheckResultD.class
else
return CheckResultBase.class;
}
private void DoSomethingOnThePage(int pageNo){
result = Checker.Load(input, pageNo, GetClassTypeByPageNo(pageNo));
// do something else with the result ....
}
我尝试了很多方法,但没有找到正确的方法来编译。
Java 可以做到这一点以及如何做到这一点?
或者有更好的方法吗?
谢谢。
Checker.Load 的签名
private static <T extends CheckResultBase> List<T> Load(byte[] input, int pageNo, java.lang.Class<? extends T> type){
// load something in to the List
}
【问题讨论】:
-
看起来您可以只返回
Class<?>而不必担心T,因为无论如何您都没有限制它。Checker.load的签名是什么,result的类型是什么? -
T来自哪里?是否在class YourClass<T>之类的类上声明,如果没有,则必须在方法上声明:private <T> Class<? extends T> GetClassTypeByPageNo(int pageNo)
标签: java generics refactoring