Java 方法返回 java.lang.Class<? extends T> 传递给泛型
Java method returning a java.lang.Class<? extends T> for passing into generics
我有这些代码行。
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
}
您可以使用方法 return 将 class 作为没有类型 T 的泛型,
private java.lang.Class<?> 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 java.lang.Class<? extends CheckResultBase> GetClassTypeByPageNo(int pageNo){
假设您所有的 CheckResultXXX
class 都扩展了 CheckResultBase
class 并且您希望此方法具有类型受限的 return 值。
我有这些代码行。
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
}
您可以使用方法 return 将 class 作为没有类型 T 的泛型,
private java.lang.Class<?> 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 java.lang.Class<? extends CheckResultBase> GetClassTypeByPageNo(int pageNo){
假设您所有的 CheckResultXXX
class 都扩展了 CheckResultBase
class 并且您希望此方法具有类型受限的 return 值。