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 值。