标题: 请教isprimtive的使用 [打印本页] 作者: 王清云 时间: 2011-9-11 13:11 标题: 请教isprimtive的使用 如下代码[code=java]public class Init {
public int[] a={1,2};
public char[] a1={'a','b'};
public int a2=3;
}[/code][code=java]
[/code][code=java]Init init=new Init();
Field[] fields=init.getClass().getDeclaredFields();
for(Field field:fields){
if(field.get(init).getClass().isArray()){
System.out.println(field.get(init).getClass().getComponentType().isPrimitive());
}else{
System.out.println(field.get(init).getClass().isPrimitive());
}
}[/code]如果是数组,则通过getComponentType来返回数组类型的class,然后用isPrimitive来判断是不是基本类型,但是如果不是数组类型该怎么判断么?[code=java]
[/code][code=java]System.out.println(field.get(init).getClass().isPrimitive());[/code]这样判断永远都是false,看java文档里面get(obj)的返回是这样写的:
Returns: the value of the represented field in object obj; primitive values are wrapped in an appropriate object before being returned也就是如果是基本类型会在返回之前封装成object类型,那如何判断非数组是不是基本类型呢?
[ 本帖最后由 王清云 于 2011-09-11 14:36 编辑 ]作者: 匿名 时间: 2011-9-11 13:35
刚刚找到方法,用getType()可以得到类型,但是如果是数组,用getType就不行,我把代码改成[code]for(Field field:fields){
if(field.get(init).getClass().isArray()){
System.out.println(field.getType());
}else{
System.out.println(field.getType());
}
}[/code]得到的结果是:
class [I
class [C
int作者: 蔡园园 时间: 2011-9-11 13:58 标题: 回复 楼主 的帖子 判断有误吧,field.get(对象)方法是取得字段值,不应该用这个方法,而是用用getType来取得字段类型来判断
package testone;
class Init{
public int[] a = {1,2};
public char[] a1 = {'a','b'};
public int a2 = 3;
}
public class DeomTest01 {
public static void main(String[] args) throws Exception, IllegalAccessException {
Init init = new Init();
Field[] fields = init.getClass().getDeclaredFields();
for(Field field :fields ){
if(field.getType().isArray()){ //得到字段类型并判断是否是数组
System.out.println(field.getType().getName());
}else{
System.out.println(field.getType().getName());
}
}
}
}