Java 查找动态提供的.class名称的类路径
我在一个非常大的应用程序中工作,其中包含大量用户定义的类。我需要找到.class文件的完全限定类名,以便在运行时加载它 .class文件的名称作为JSON Web标记化URL中的键值对传递。我解密令牌并捕获相关参数。这些参数是重定向用户的ID和web类Java 查找动态提供的.class名称的类路径,java,classpath,classnotfoundexception,Java,Classpath,Classnotfoundexception,我在一个非常大的应用程序中工作,其中包含大量用户定义的类。我需要找到.class文件的完全限定类名,以便在运行时加载它 .class文件的名称作为JSON Web标记化URL中的键值对传递。我解密令牌并捕获相关参数。这些参数是重定向用户的ID和web类 Claims jwtVerified = bus.decryptJsonWebToken(token); if(jwtVerified != null){ String Id = jwtVerified.get("ID")
Claims jwtVerified = bus.decryptJsonWebToken(token);
if(jwtVerified != null){
String Id = jwtVerified.get("ID").toString();
String page = jwtVerified.get("page").toString();
PageParameters pageParameters = new PageParameters();
pageParameters.add("Id", Id);
try {
Class<Page> c = null;
c = (Class<Page>) Class.forName("com.foo." + page);
throw new RestartResponseException(c, pageParameters);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
声明jwtVerified=bus.decryptJsonWebToken(令牌);
如果(jwtVerified!=null){
String Id=jwtVerified.get(“Id”).toString();
字符串page=jwtVerified.get(“page”).toString();
PageParameters PageParameters=新的PageParameters();
pageParameters.add(“Id”,Id);
试一试{
c类=空;
c=(Class)Class.forName(“com.foo.”+页面);
抛出新的RestartResponseException(c,pageParameters);
}catch(classnotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
问题是我不想硬编码“com.foo”,因为不同的页面可以作为页面变量传递。这些类生活在不同的包中(例如,“com.foo.Myclass.class”和“com.bar.MyClass2.class”)。此外,如果我没有提供完全限定的类路径,则会抛出java.lang.ClassNotFoundException。您可以使用包,但必须确保没有两个具有相同名称的类
此代码可能是一个良好的开端:
Reflections reflections = new Reflections("com.yourpackage", new SubTypesScanner());
final Collection<Class<? extends Page>> allTypes = reflections.getSubTypesOf(Page.class);
final Map<String, Class<? extends Page>> shortNameToClass = new HashMap<>();
for (Class<? extends Page> type : allTypes) {
shortNameToClass.put(type.getSimpleName(), type);
}
for (Map.Entry<String, Class<? extends Page>> entry : shortNameToClass.entrySet()) {
System.out.println(entry.getKey() + "->" + entry.getValue());
}
Reflections Reflections=newreflections(“com.yourpackage”,new subsubsubstandscanner());
最终的集合“类路径”和“完全限定类名”是两个不同的东西。你是对的。我对我的问题进行了编辑,使之更加准确。