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

Java 如何将反射字段类型转换为另一个对象?,java,reflection,casting,field,Java,Reflection,Casting,Field,我目前正在使用反射来获取GUI类的声明字段。但是,我找不到一种方法能够将字段类型转换到我需要的对象中 我需要的是能够获取字段的实际对象,因此,例如,如果返回的字段类型为JLabel,我需要能够在JLabel中对字段进行类型转换,以访问该对象 以下是我正在使用的代码,但是没有检索实际的对象组件: for (int i = 0; i< fields.length; i++) { this.fields.add(fields[i]);

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


我需要的是能够获取字段的实际对象,因此,例如,如果返回的字段类型为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);
                }

        }
for(int i=0;i
我想你想做这样的事,是吗

(SomeSubClass)fieldType.newInstance();
我进一步假设
fieldType
SomeSubClass
的一个超类,因此您会得到一个异常(很可能是
ClassCastException

例如:

class A {}
class B extends A{}

fieldType = A.class;

//this would throw an exception since A it NOT a B!
(B)fieldType.newInstance();
Object value = field.get(objectTheFieldBelongsTo);

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

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

例如:

class A {}
class B extends A{}

fieldType = A.class;

//this would throw an exception since A it NOT a B!
(B)fieldType.newInstance();
Object value = field.get(objectTheFieldBelongsTo);

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

你的要求对我来说没有多大意义。我怀疑这是因为你对
字段
对象的真正含义没有一个清晰的概念

字段
对象是类的特定字段的描述符。它不表示特定实例的字段,因此将其“强制转换”为字段中的值没有多大意义。事实上,这

    Class<?> fieldType = f.getType();
    fieldType.newInstance();

什么例外?请显示堆栈跟踪您实际要完成的任务是什么?(你希望类型转换为你做什么?)我需要能够将字段类型转换为其他一些UI组件,因为我需要能够使用UI对象。。。eg将场转换为aJLabel@ict1991:请向我们显示完整的堆栈跟踪,以及您正在使用的更多代码。@amit将引发什么异常?至少OP告诉了我们没有抛出的内容:
没有抛出IllegaAccessException
:)@amit是的,这很容易被忽略,甚至可能不正确。至少说不抛出什么是没有意义的,否则我可以添加:
没有抛出NumberFormatException
等等;)