我如何使用 java 中的反射访问内部 class 变量值?
How i can access inner class variable value using reflection in java?
假设我有如下所示的 class 和多个内部 classes :
public class Constants {
public class Class1 {
public static final String IODATA = "IOData";
public static final String HUB_INPUTS = "HubInputs";
}
public class Class2 {
public static final String CLASS_INPUTS = "Class Inputs";
public static final String AUXILIARIES_ON_BUTTON = "Auxiliaries On Button";
}
public class Class3 {
public static final String CLASS_INPUTS = "Class Inputs";
public static final String AUXILIARIES_ON_BUTTON = "Auxiliaries On Button";
}
}
我想访问所有内部 class 变量然后我可以编写如下代码,我可以获得变量名称和值:
public static void getClassNameMap() throws Exception {
Constants cons = new Constants();
Constants.Class1 class1 = cons.new Class1();
for (Field fields : class1 .getClass().getFields()) {
System.out.println(fields.get(projectObjectCons).toString() + "--" + fields.getName());
}
}
但是我如何获得所有内部 classes 名称的字符串数组,例如:
String []arr = {"Class1","Class2","Class3"};
如何使用这些字符串 class 名称获取所有内部 class 变量和值???
因为我无法使用其字符串名称创建 class 实例。
请帮帮我。
我相信您正在寻找这样的东西:
class Sample {
public static void main(String arf[]) throws ClassNotFoundException {
Class<?> clazz = Class.forName("C");
Class<?>[] arr = clazz.getDeclaredClasses();
System.out.println(arr.length);
String[] classAsStrings = new String[arr.length];
for (int i=0;i<arr.length;i++){
classAsStrings[i] = arr[i].getSimpleName();
}
System.out.println(Arrays.toString(classAsStrings));
}
}
class C {
class Class1 {
}
class Class2 {
}
}
O/P :
2
[Class1, Class2]
Class[] classes = Constants.class.getDeclaredClasses();
for(Class innerClass: classes){
//System.out.println(innerClass.getName());
Field[] fields = innerClass.getDeclaredFields();
for(Field field : fields){
//System.out.println(field.getName());
//your implementation
}
}
此代码将符合您的期望。
谢谢
也许这些片段就是您想要实现的...
public static void main(String[] args) {
Class klass = Constants.class;
Class[] cs = klass.getClasses();
for(Class c : cs) {
System.out.println(c.getName());
Field[] fields = c.getDeclaredFields();
for(Field f : fields) {
try {
Object o = f.get(c);
System.out.println( "\t" + f.get(c).toString() + " -- " + f.getName());
} catch (Exception e) {
// ignore others
}
}
}
}
如果您有 class 的字符串,您可以使用
Class klass = Class.forName("com.package.of.Constant");
希望对您有所帮助。
假设我有如下所示的 class 和多个内部 classes :
public class Constants {
public class Class1 {
public static final String IODATA = "IOData";
public static final String HUB_INPUTS = "HubInputs";
}
public class Class2 {
public static final String CLASS_INPUTS = "Class Inputs";
public static final String AUXILIARIES_ON_BUTTON = "Auxiliaries On Button";
}
public class Class3 {
public static final String CLASS_INPUTS = "Class Inputs";
public static final String AUXILIARIES_ON_BUTTON = "Auxiliaries On Button";
}
}
我想访问所有内部 class 变量然后我可以编写如下代码,我可以获得变量名称和值:
public static void getClassNameMap() throws Exception {
Constants cons = new Constants();
Constants.Class1 class1 = cons.new Class1();
for (Field fields : class1 .getClass().getFields()) {
System.out.println(fields.get(projectObjectCons).toString() + "--" + fields.getName());
}
}
但是我如何获得所有内部 classes 名称的字符串数组,例如:
String []arr = {"Class1","Class2","Class3"};
如何使用这些字符串 class 名称获取所有内部 class 变量和值??? 因为我无法使用其字符串名称创建 class 实例。 请帮帮我。
我相信您正在寻找这样的东西:
class Sample {
public static void main(String arf[]) throws ClassNotFoundException {
Class<?> clazz = Class.forName("C");
Class<?>[] arr = clazz.getDeclaredClasses();
System.out.println(arr.length);
String[] classAsStrings = new String[arr.length];
for (int i=0;i<arr.length;i++){
classAsStrings[i] = arr[i].getSimpleName();
}
System.out.println(Arrays.toString(classAsStrings));
}
}
class C {
class Class1 {
}
class Class2 {
}
}
O/P :
2
[Class1, Class2]
Class[] classes = Constants.class.getDeclaredClasses();
for(Class innerClass: classes){
//System.out.println(innerClass.getName());
Field[] fields = innerClass.getDeclaredFields();
for(Field field : fields){
//System.out.println(field.getName());
//your implementation
}
}
此代码将符合您的期望。
谢谢
也许这些片段就是您想要实现的...
public static void main(String[] args) {
Class klass = Constants.class;
Class[] cs = klass.getClasses();
for(Class c : cs) {
System.out.println(c.getName());
Field[] fields = c.getDeclaredFields();
for(Field f : fields) {
try {
Object o = f.get(c);
System.out.println( "\t" + f.get(c).toString() + " -- " + f.getName());
} catch (Exception e) {
// ignore others
}
}
}
}
如果您有 class 的字符串,您可以使用
Class klass = Class.forName("com.package.of.Constant");
希望对您有所帮助。