java - 如何将反射字段类型转换为另一个对象?

标签 java reflection casting field

我目前正在使用反射来获取 GUI 类的声明字段。但是,我找不到一种方法可以将字段类型转换为我需要的对象。

我需要的是能够获取 Field 的实际对象,因此,如果返回的字段是 JLabel 类型,我需要能够在 JLabel 中对字段进行类型转换才能访问该对象

以下是我正在使用的代码,但是未检索实际的对象组件:

for (int i = 0; i< fields.length; i++) {
                this.fields.add(fields[i]);
                Class<?> fieldType = fields[i].getType();
                try {
                    Component c = (Component) fieldType.newInstance();
                    System.out.println(c.getX + " " + c.getY());

                } catch (InstantiationException ex) {
                    Logger.getLogger(HeatMap.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IllegalAccessException ex) {
                    Logger.getLogger(HeatMap.class.getName()).log(Level.SEVERE, null, ex);
                }

        }

最佳答案

我想你想做这样的事情,不是吗?

(SomeSubClass)fieldType.newInstance();

我进一步假设 fieldTypeSomeSubClass 的父类(super class),因此您会得到一个异常(很可能是 ClassCastException)。

示例:

class A {}
class B extends A{}

fieldType = A.class;

//this would throw an exception since A it NOT a B!
(B)fieldType.newInstance();

编辑:

要将对象转换为您需要的对象,请使用 instanceof 关键字。

示例:

Object value = field.get(objectTheFieldBelongsTo);

if( value instanceof JLabel) {
  JLabel labelValue = (JLabel)value;
  //whatever you want
}

关于java - 如何将反射字段类型转换为另一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9906690/

相关文章:

sql-server - SQL Server 2008 将 varchar 转换为日期时间

c# - 从堆栈中的类获取通用参数

Scala:通过包外的结构类型访问包可见方法

c# - System.Reflection.MethodInfo.Invoke 和多线程

java - 使用instanceof和casting获取原始Java类

Java泛型,在方法调用期间定义类型

java - 从其余 Controller 方法请求 String [] + String 作为 Json

java - 使用java在第二次出现空格时分割字符串

java - 在tomcat中创建war文件并创建web-inf

java - spring data jpa的奇怪行为