该方法返回的Object的实例是什么?

时间:2015-05-29 13:19:07

标签: java reflection instanceof

我编写了一个下面的方法,但是我需要找到返回object的实例。我还需要检查它是JSON类型还是返回的其他类型,然后这个方法会起作用吗? / p>

public class DynamicObject {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        DynamicObject obj = new DynamicObject();

        if(obj.testObj() instanceof String)
            System.out.println("String");
        else if (obj.testObj() instanceof Array)
            System.out.println("Integer Array");
        else if (obj.testObj() instanceof Integer)
            System.out.println("Integer");


    }

    private Object testObj(){
        boolean test = false;
        String s= new String("test");
        Integer in[] = {1,2,3,4,5};
        if(test){
            return s;
        }else{
            return in;
        }
    }

}

这种情况的实例是什么。如果我运行它,那么控制台不会显示任何内容。

4 个答案:

答案 0 :(得分:3)

instanceof应为Integer []

else if (obj.testObj() instanceof Integer[])
            System.out.println("Integer Array");

答案 1 :(得分:2)

Java数组不是java.lang.reflect.Array的子​​类。

换句话说,整数数组FAILS测试

(obj.testObj() instanceof Array)

答案 2 :(得分:1)

$sql1="SELECT * FROM myTable WHERE `area` = :criteria AND `condition` = :diagnosis"; $stmt = $dbh->prepare($sql1); $stmt->execute(array('criteria' => $search_crit, 'diagnosis' => $diagnosis)); 将返回一个Integers数组,其Java类型写为testObj()。在Integer[]中,您只测试main()StringArray的实例,因此无法获得任何打印语句。

如果您要将第二个测试从Integer更改为Array,则可以按预期工作:

Integer[]

使用else if (obj.testObj() instanceof Integer[]) System.out.println("Integer Array"); 的原因不起作用是因为obj.testObj() instanceof Array类实际上不是Java数组的超类。根据{{​​3}},类"提供静态方法来动态创建和访问Java数组" - 它本身不是一个数组,它只是一个创建和访问数组的实用程序。

答案 3 :(得分:0)

获取对象的类型:

Class cls = obj.testObj().getClass(); 
System.out.println("The type of the object is: " + cls.getName());