从名称中获取属性的类

时间:2011-11-29 12:50:07

标签: java class reflection dynamic attributes

示例无效:

Object o = ...; // The object you want to inspect
Class<?> c = o.getClass();

Field f = c.getDeclaredField("myColor");
f.setAccessible(true);

String valueOfMyColor = (String) f.get(o);

此代码中的问题是您必须使用String类进行强制转换。我正在寻找的是能够从其名称中找到属性的类。

例如:

class Brush {
    Color myColor;
}

//Somewhere else, in a far far away galaxy
Class<?> c = getMyClassFromAttributeName("myColor");
// and c should be of type Color

我试过

Field f = this.getClass().getDeclaredField(code);
Class<?> c1 = f.getClass(); //Gives Field 
Class<?> c2 = f.getDeclaringClass(); //Gives Brush

谢谢!

PS: 使用了In Java, how to get attribute given the string with its name?

中的示例代码

3 个答案:

答案 0 :(得分:2)

尝试:

 field.getType();

这对我有用 (现在写这100次:“我会一直读javadoc并查询公共接口,然后再提出琐碎的问题”)。

答案 1 :(得分:1)

使用Field.getType()

Field f = Brush.class.getDeclaredField("myColor");
Class<?> c = f.getType();

但是,您将无法使用它来删除代码中的强制转换。

答案 2 :(得分:1)

使用Field.getType();

示例:

Class<?> fieldType = f.getType(); //Should return Color.