小编典典

仅靠简单名称来反思地找到一个类

java

我想知道是否有任何给定的函数可以让我自省一个类,而不必编写包含该类的包。

例如,我想看一看 Integer 类的方法和超类,为此我必须指定该类所在的包。这将是“ java.lang.Integer”

而不是这样做,我只想键入类名称以显示该类的信息。就像这个“整数”

无论程序位于何处,如何使我的程序仅检查类名?


阅读 202

收藏
2020-09-28

共1个答案

小编典典

Java不会阻止您创建自己的my.company.Integer类和my.other.company.Integer类,因此它如何无法知道哪个Integer类是
正确的 类。

我可以建议的答案最接近的是,创建一个预定义的软件包列表,在其中您要搜索该类,并继续尝试每个软件包,直到找到您的类为止。

所以像这样:

class ClassFinder{
  public static final String[] searchPackages = {
    "java.lang",
    "java.util",
    "my.company",
    "my.company.other" };

  public Class<?> findClassByName(String name) {
    for(int i=0; i<searchPackages.length; i++){
      try{
        return Class.forName(searchPackages[i] + "." + name);
      } catch (ClassNotFoundException e){
        //not in this package, try another
      } catch (...){
        //deal with other problems...
      }
    }
    //nothing found: return null or throw ClassNotFoundException
    return null;
  }
}
2020-09-28