【问题标题】:Reflection - getting variables from a class反射 - 从类中获取变量
【发布时间】:2014-01-01 00:29:44
【问题描述】:

AExampleTestClass.java 只包含public String setence = "false";

在我正在运行的课程中,有几种方法:

getPath(name) - 获取给定文件名的路径

getVariableNames(File) - 获取给定文件中的变量 和

change(classname,var,to) - 用于替换用字符串“to”给出的类名中的变量。

现在当我运行getPath("AExampleTestClass")

返回正确的路径

C:\Users\..\test\AExampleTestClass.java

但是当我跑步时

getPath("AExampleTestClass").getClass()

返回

class java.lang.String

因此,当我使用 getVariables... 时,它会返回 java.lang.String 中的变量,而不是 AExampleTestClass.java 中的变量

我可以使用什么来从未知名称的类中访问未知名称的变量(类+变量名称是字符串)?

【问题讨论】:

    标签: java class reflection get


    【解决方案1】:

    getClass() 返回您正在调用它的对象的类。
    当你在 String 上调用它时,它总是返回 String.class。

    你想要ClassLoader.getSystemClassLoader().loadClass(...)

    【讨论】:

    • 我在 loadClass(String) 中放了什么,因为使用正确的路径只会得到一个类未找到异常?
    • @user2871826:要从文件路径加载,我相信你需要一个URLClassLoader。
    • 我已经研究过了,似乎没有什么相关的,我不明白为什么它很难使用 "foo f = new foo(); f.var = 4;"但只是将变量作为类名和变量名:3
    【解决方案2】:

    由于getPath 返回String,该方法为该字符串调用getClass 方法。

    你的代码和这样做是一样的:

    String path = getPath("AExampleTestClass");  // returns a String with the path
    path.getClass();   // returns String.class as expected
    

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多