Java 获取字段的值
我想获取字段初始化时使用的值。 例如:Java 获取字段的值,java,reflection,field,Java,Reflection,Field,我想获取字段初始化时使用的值。 例如: 有什么方法可以做到这一点吗?您首先必须在ClassB中创建一个ClassA实例: ClassA=新的ClassA; System.out.printlna.someString; 但是根据代码的当前格式,最好的选择是声明someString static:publicstaticstring someString=Merry Christmas;。然后,您可以从任何包的任何其他类直接访问此字段,因为它是公共的: System.out.printlnCla
有什么方法可以做到这一点吗?您首先必须在ClassB中创建一个ClassA实例: ClassA=新的ClassA; System.out.printlna.someString; 但是根据代码的当前格式,最好的选择是声明someString static:publicstaticstring someString=Merry Christmas;。然后,您可以从任何包的任何其他类直接访问此字段,因为它是公共的: System.out.printlnClassA.someString;
我认为您没有完全理解非静态字段的含义:它意味着该字段对于ClassA的每个实例对象都有一个特定的值,因此您无法访问字段内容,因为可能有数千个字段,每个字段都有不同的值 有几种选择: 一种可能的解决方案是将字段设置为静态: 或者正如@toubou所说,您可以构造一个对象并访问该特定对象的字段。但是请注意,字段表示对象的状态,因此可以修改。如果ClassA.string是静态的,则这是可能的。在这种情况下,您可以通过反射获取值,而无需获取ClassA实例,其中定义了someString:
class ClassA {
public static String someString = "Merry Christmas";
}
...
Object s = ClassA.class.getField("someString").get(null);
如果变量不是静态的,并且您只想获取其初始值,您仍然可以这样做,假设ClassA有一个默认构造函数:
public static void demo(Class<?> cl) throws Exception {
Object s = cl.getField("someString").get(cl.newInstance());
System.out.println(s);
}
这只是一个例子。我正在创建一个带有注释的设置系统,因此我的设置中只有字段可用。现在,我将someString所在的类作为类提供给ClassB。如何从该类创建新对象?@MyNameIsHans如果您有Class类型的变量cl,则可以执行cl.getFieldsomeString.getnull.Yes。但是我希望someString保持非静态,这就是为什么我必须创建一个新的cl对象。我需要初始化someString时使用的值OK。我有很多这个类和其他使用ClassB的类的实例。所以总是创建一个新实例会有点低效。有没有办法只为每种类型的类创建一个默认类,并将它们存储在静态映射或类似的东西中,然后使用这些类来获取某些字符串/其他对象的默认值。@MyNameIsHans绝对有办法!你可以做一张地图。请dv'er解释一下这个答案有什么问题吗?
class ClassA {
public static String someString = "Merry Christmas";
}
...
Object s = ClassA.class.getField("someString").get(null);
public static void demo(Class<?> cl) throws Exception {
Object s = cl.getField("someString").get(cl.newInstance());
System.out.println(s);
}