[英]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提供列出类名的方法。
我也想列出一个包中的所有类,但到目前为止,这样做的方法非常糟糕:
引用一个较旧的 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.