黑马程序员技术交流社区

标题: 请教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;

import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;

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());
                        }
                }
        }
}

结果
[I
[C
int
在反射中[代表数组,后面的I代表类型。所以[I就是整形数组。
[ 本帖最后由 蔡园园 于 2011-09-11  14:02 编辑 ]
作者: 匿名    时间: 2011-9-11 14:10
是数组的时候才需要field.get(init).getClass().getComponentType().isPrimitive()来获得数组各元素的基本数据类型,非数组的时候直接field.getType().isPrimitive()判断就行了
作者: 匿名    时间: 2011-9-11 14:33
标题: 回复 板凳 的帖子
嗯,数组不能用getType得到其类型,需要用getComponentType()来得到。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2