繁体   English   中英

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

[英]Getting the names of all Java classes declared in a 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 (); 

感谢您的意见。

Java不提供此功能。 包级别没有自省。 这些类可能是记录在数据库中,或在网络连接的另一端。 不需要对其进行存储和组织,以方便按包枚举它们。

你可以做一个自定义的类装载器和API提供列出类名的方法。

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

  • 像建议的JOTN一样 -需要文件访问权限-如果是jar,则不需要
  • 列出一个JAR条目 -好吧,还需要jar文件

引用一个较旧的 SO问题:

无法查询包的类(甚至是子包)。 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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM