ClassNotFoundException错误和反射

时间:2014-01-01 19:52:26

标签: java variables reflection classnotfoundexception

我能够访问一个类及其变量,但是在更改用户定义的变量方面是否存在?

e.g:

Class c = Class.forName(theclassname);
    Object o = c.newInstance();
    theclassname t = (theclassname) o;

我能做到

t.variable = 1;

但我可以吗

String v = "variable";
t.v = 1;

以任何方式?

3 个答案:

答案 0 :(得分:2)

你不能使用

Class c = Class.forName("C:\\A.txt");

就这样。

这段代码按提供的名称返回Class,而不是txt文件。

而不是这种情况,你必须创建类(假设这是一个名为A的类),然后使用以下代码检索反射类A

Class c = Class.forName("A");

请注意,这是一个类,而不是一个txt文件。

--- --- EDIT

通过此次修改,您完全可以更改问题。
根据新的(已修改的)问题,您无法在撰写时使用反射:

t.v = 1;

您应该使用以下代码:

t.getClass().getField(v).set(t, 1);

这将解决您的问题。

答案 1 :(得分:1)

C:\A.txt是一个文本文件......类文件应以.class结尾!

编写一个类A.java,然后使用

进行编译
javac A.java

然后您将获得A.class,然后您可以使用

加载它
Class c = Class.forName("A");

请注意,"A"不是文件系统上某个文件的绝对路径或相对路径,而是类路径上该类的资源名称。请参阅Class#forName

的javadoc

答案 2 :(得分:1)

您可以使用反射来设置像这样的字段

String v = "variable";
// like t.{v} = 1;
t.getClass().getField(v).set(t, 1);