仅通过简单的名称反思地找到一个类

stb*_*amb 4 java reflection class

我想知道是否有任何给定的函数允许我内省一个类而不必编写包含类的包.

例如,我想看一下Integer类的方法和超类,为了做到这一点,我必须指定类所在的包.这将是"java.lang.Integer"

而不是这样做,我只想输入类名,以便显示类的信息.就像这个"整数"

我怎么能让我的程序只检查类名,无论它位于何处?

rod*_*ion 9

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您想获得所有可用软件包的列表而不是硬编码,请参阅此处.

请注意,此方法不太可能表现良好,因此请谨慎使用.