我能够访问一个类及其变量,但是在更改用户定义的变量方面是否存在?
e.g:
Class c = Class.forName(theclassname);
Object o = c.newInstance();
theclassname t = (theclassname) o;
我能做到
t.variable = 1;
但我可以吗
String v = "variable";
t.v = 1;
以任何方式?
答案 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
答案 2 :(得分:1)
您可以使用反射来设置像这样的字段
String v = "variable";
// like t.{v} = 1;
t.getClass().getField(v).set(t, 1);