2012-06-09 55 views
1

比方说,我有称为thisObject的对象,其可以是一个整型,字符串,对象等,或这些类的数组。我希望将得到的类存储在名为thisObjectArrayClassClass变量中。如何获得类数组的.class值?

这不会编译,但将有望解释我在寻找:

switch(thisObject.class) { 
    case int.class: 
     int[] tempObject; 
     thisObjectArrayClass = tempObject.class; 
     break; 
    case float.class: 
     float[] tempObject; 
     thisObjectArrayClass = tempObject.class; 
     break; 
    case int[].class: 
     int[][] tempObject; 
     thisObjectArrayClass = tempObject.class; 
     break; 
} 

这里的问题是,它依赖于一个开关/ case语句,这显然是不可接受的。我尝试使用反射来做到这一点失败了,但我是Java新手,所以也许我做错了什么。这怎么能实现?

回答

7

你正在寻找Array.newInstance

thisObjectArrayClass = Array.newInstance(thisObject.class, 0).getClass(); 

此实例化一个0长度阵列的thisObject.class ES,并请求这样的对象的class

+0

呸......这正是我试过,但我使用'.class'而不是'.getClass()'。我很亲密。 :( – TimFoolery

+0

@Michael:'.class'是对象的_static class_,在本例中是'java.lang.Object'。'getClass()'是对象的_dynamic class_。 –

+0

使用'thisObject.class'意味着那'thisObject'是类的文字名称,在这种情况下,这个问题的答案也只是使用'的thisObject []。class'。我怀疑'thisObject'实际上是一个引用变量,在这种情况下获得类它所指向的对象,他需要做的'thisObject.getClass()' – user102008

1

对象有一个getClass()方法。

public Class getClass(Object thisObject) { 
    Class thisObjectArrayClass = obj.getClass(); 
    System.out.println("The type of the object is: " + thisObjectArrayClass.getName()); 
    return thisObjectArrayClass; 
} 
+0

我看不出怎么回答那得到代表的类的'类型的对象数组的类对象的thisObject的问题'。 –

-1

您只能切换整数(或Java7中的字符串)。无论是使用7.无论哪种方式的if/else语句序列或交换机你可能寻找的方法是thisObject.getClass()

switch(obj.getClass().getName()) { 
    case "java.lang.String" : 
     System.out.println("Found String"); 
     break; 
    default: 
     System.out.println("Found:" + obj.getClass().getName()); 
} 
-2
int array[] = new int[7]; 
array.getClass();