java使用反射的时候,可以指定只查找某个包文件吗?

因为包多的话,遍历查找会损耗性能。所以我想只加载某个包,然后查找类。请问可以实现吗?最好能给一些示例代码。谢谢。... 因为包多的话,遍历查找会损耗性能。
所以我想只加载某个包,然后查找类。
请问可以实现吗?
最好能给一些示例代码。
谢谢。
展开
 我来答
帐号已注销
2012-07-11 · TA获得超过751个赞
知道小有建树答主
回答量:376
采纳率:0%
帮助的人:365万
展开全部
private static List<Class> getClassesByPackageName(String packageName)
throws IOException, ClassNotFoundException {
ClassLoader classLoader = Thread.currentThread()
.getContextClassLoader();
String path = packageName.replace('.', '/');
Enumeration<URL> resources = classLoader.getResources(path);
List<File> dirs = new ArrayList<File>();
while (resources.hasMoreElements()) {
URL resource = resources.nextElement();
dirs.add(new File(resource.getFile()));
}
ArrayList<Class> classes = new ArrayList<Class>();
for (File directory : dirs) {
classes.addAll(findClasses(directory, packageName));
}
return classes;
}
private static List<Class> findClasses(File directory, String packageName)
throws ClassNotFoundException {
List<Class> classes = new ArrayList<Class>();
if (!directory.exists()) {
return classes;
}
File[] files = directory.listFiles();
for (File file : files) {
if (file.isDirectory()) {
// 递归查找文件夹【即对应的包】下面的所有文件
assert !file.getName().contains(".");
classes.addAll(findClasses(file, packageName + '.'
+ file.getName()));
} else if (file.getName().endsWith(".class")) {
classes.add(Class.forName(packageName
+ "."
+ file.getName().substring(0,
file.getName().length() - 6)));
}
}
return classes;
}
public static void main(String[] args) {
try {
List<Class> list=getClassesByPackageName("com.test");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getName());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

这样是获取指定包下的所有类,你拿去用下
匿名用户
2017-09-19
展开全部
Class clazz=Class.forName("abc.def.MyClass");

~
~
~
~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
forever_cy_07
2012-07-12 · 超过35用户采纳过TA的回答
知道答主
回答量:290
采纳率:0%
帮助的人:115万
展开全部
试试楼上的吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sramshiyan
2012-07-11 · 超过13用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:38.1万
展开全部
这个真没用过
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式