如何确定Java中的字段是否为char [](char数组)类型?

时间:2014-05-31 23:00:17

标签: java arrays reflection

我通过反射动态地实例化对象,方法是将字段名称与Map中的同名键匹配。其中一个字段是字符数组(char []):

private char[] traceResponseStatus;

在plinko迭代器中,我有目标类的类型代码,例如

Collection<Field> fields = EventUtil.getAllFields(MyClass.getClass()).values();
for (Field field : fields)
{
Object value = aMap.get(field.getName());
...
    else if (Date.class.equals(fieldClass))
    {

例如,fieldClassDate

class MyClass
{
    private Date foo;

如果fieldClass类型是char []?

,那么要测试的表达式是什么

3 个答案:

答案 0 :(得分:1)

您需要使用的代码是:

(variableName instanceof char[])

instanceof是一个运算符,它返回一个布尔值,指示左边的对象是否是右边类型的实例,即对于除{null之外的所有内容的variable instanceof Object,这应该返回true,并在你的case它将确定你的字段是否为char数组。

答案 1 :(得分:1)

您正在寻找

else if (traceResponseStatus instanceof char[])

答案 2 :(得分:1)

@ bdean20处于正确的轨道上,提出了愚蠢的建议,但具体(现在很明显)的解决方案:

if(char[].class.equals(field.getType()))

测试代码:

import java.lang.reflect.Field;


public class Foo {

    char[] myChar;

    public static void main(String[] args) {
        for (Field field : Foo.class.getDeclaredFields()) {
            System.out.format("Name: %s%n", field.getName());
            System.out.format("\tType: %s%n", field.getType());
            System.out.format("\tGenericType: %s%n", field.getGenericType());
            if(char[].class.equals(field.getClass()))
            {
                System.out.println("Class match");
            }
            if(char[].class.equals(field.getType()))
            {
                System.out.println("Type match");
            }
        }
    }
}

输出:

Name: myChar
    Type: class [C
    GenericType: class [C
Type match