获取包中声明的所有Java类的名称

时间:2010-11-13 14:01:37

标签: java class package

我正在编写一个功能,将类放入程序的某个包中会很有帮助。另外,我只想要子类化某个类的类。

我需要这些类才能在它们上调用静态方法。

有自动方法吗?如果是这样,它会慢吗?

如果我不清楚,我想要的是这样的:

ArrayList<Class<? extends MySuperClass>> classes = ;

classes.add(MyClass.class); 
classes.add(MyClass2.class); 

我不想为每个类调用add,而是自动获取该类列表。

类的数量很少,所以如果自动技巧很慢,我不介意手动声明它们 - 这个应用程序适用于移动平台。

无论哪种方式,我还想知道如何为ArrayList中的每个方法调用静态方法:

  // error The method nameOfStaticMethod is undefined for the type Class<capture#2-of ? extends MySuperClass>
  classes.get(0).nameOfStaticMethod (); 

感谢您的评论。

2 个答案:

答案 0 :(得分:2)

Java不提供此功能。包级别没有内省。这些类可以是数据库中的记录,也可以是网络连接的另一侧。不需要存储和组织它们,以便于通过包装枚举它们。

您可以创建自定义类加载器和API,以提供列出类名的方法。

答案 1 :(得分:1)

我也想列出一个包中的所有类,但到目前为止,这样做的方法非常糟糕:

  • 喜欢JOTN建议 - 需要文件访问权限 - 如果它是jar的话
  • 列出JAR条目 - 好吧,还需要jar文件

引用older SO问题:

  

无法为Package查询它的类(甚至是它的子包)。 http://forums.sun.com/thread.jspa?threadID=341935&start=0&tstart=0包含一个非常好的讨论,讨论为什么会出现问题,以及针对您的问题的一些解决方案。

无论如何,这是你在类上调用静态方法的方法:

Method m = Integer.class.getMethod("toString", Integer.TYPE);
System.out.println(m.invoke(null, 123));