这是我开发的一个定制解决方案来查找包的所有类:
public class ClassFinder {
private static final char PKG_SEPARATOR = '.';
private static final char DIR_SEPARATOR = '/';
private static final String CLASS_FILE_SUFFIX = ".class";
private static final String BAD_PACKAGE_ERROR = "Unable to get resources from path '%s'. Are you sure the package '%s' exists?";
public static List> find(String scannedPackage) {
String scannedPath = scannedPackage.replace(PKG_SEPARATOR,DIR_SEPARATOR);
URL scannedUrl = Thread.currentThread().getContextClassLoader().getResource(scannedPath);
if (scannedUrl == null) {
throw new IllegalArgumentException(String.format(BAD_PACKAGE_ERROR,scannedPath,scannedPackage));
}
File scannedDir = new File(scannedUrl.getFile());
List> classes = new ArrayList>();
for (File file : scannedDir.listFiles()) {
classes.addAll(find(file,scannedPackage));
}
return classes;
}
private static List> find(File file,String scannedPackage) {
List> classes = new ArrayList>();
String resource = scannedPackage + PKG_SEPARATOR + file.getName();
if (file.isDirectory()) {
for (File child : file.listFiles()) {
classes.addAll(find(child,resource));
}
} else if (resource.endsWith(CLASS_FILE_SUFFIX)) {
int endIndex = resource.length() - CLASS_FILE_SUFFIX.length();
String className = resource.substring(0,endIndex);
try {
classes.add(Class.forName(className));
} catch (ClassNotFoundException ignore) {
}
}
return classes;
}
}
然后,只需使用:
List> classes = ClassFinder.find("com.package");
@H_301_7@
@H_301_7@
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250