【发布时间】:2016-01-15 16:04:57
【问题描述】:
我正在学习 Java 中的反射。我开始知道我们可以很容易地提取带有反射的类文件中使用的方法。
我有一个包含 n 个方法的 java 类文件。
测试文件是指我要从中读取所用方法的 java 类,而 testSample 是我从中访问 Testfile 类方法的类
public class testSample
{
public static void main(String args[]) throws ClassNotFoundException
{
File filename = new File(
"C:/ProgramData/Eclipse/Projects_3.7.1/Testfile.java");
String filen = filename.toString();
if (filen.endsWith(".java"))
{
String actfilename = StringUtils.substringBefore(filen, ".java");
Class classname = Class.forName(actfilename);
Method[] method = classname.getMethods();
for (Method methods : method)
{
System.out.println("Method name \r\n" + methods.getName());
Class[] parameters = methods.getParameterTypes();
for (Class parametername : parameters)
{
System.out.println("parameters name \r\n"
+ parametername.getName());
}
}
}
}
}
请帮我解决这个问题。
我得到的异常错误如下
Exception in thread "main" java.lang.ClassNotFoundException: testFile
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.TestSample1.retrievemethods(TestSample1.java:58)
at com.TestSample1.filetraverse(TestSample1.java:43)
at com.TestSample1.filetraverse(TestSample1.java:45)
at com.TestSample1.main(TestSample1.java:22)
测试文件
非常感谢您的宝贵建议。但我还没有摆脱它。
让我说清楚。
static File appname="C:/programdata/eclipse/appname";
public static void main(String[] args) throws ClassNotFoundException
{
TestSample1 tf1=new TestSample1();
tf1.filetraverse(appname);
}
public void filetraverse(File appname) throws ClassNotFoundException
{
if (appname.isDirectory())
{
File[] files = appname.listFiles();
for (File filename : files)
{
String finame=filename.getName().toLowerCase();
if(finame.endsWith("java"))
{
retrievemethods(filename,reflection);
}
filetraverse(filename);
}
}
}
public void retrievemethods(File filename,File reflection) throws
ClassNotFoundException
{
String classna=filename.toString();
String classnam=StringUtils.substringBetween(classna, "/appname/", ".java");
Class reflectclass = Class.forName(classnam);
Method[] method=reflectclass.getMethods();
for (Method methods : method)
{
System.out.println("Method name \r\n"+methods.getName());
Class[] parameters=methods.getParameterTypes();
for (Class parametername : parameters)
{
System.out.println("parameters name \r\n"+parametername.getName());
}
}
}
我得到的错误是找不到类异常。
【问题讨论】:
-
actfilename的内容是什么 -
“我知道我们可以很容易地提取类文件中使用的方法”
foo.java不是类文件,foo.class是。您还需要在类路径中找到要使用的类包的位置,或者使用 ClassLoader 加载它。
标签: java reflection classnotfoundexception