A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王清云 黑马帝   /  2011-9-11 13:11  /  2222 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如下代码[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 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
admin + 2 看看大家的回答!

查看全部评分

4 个回复

倒序浏览
黑马网友  发表于 2011-9-11 13:35:40
沙发
刚刚找到方法,用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

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报

回复 楼主 的帖子

判断有误吧,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 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-11 14:10:12
板凳
是数组的时候才需要field.get(init).getClass().getComponentType().isPrimitive()来获得数组各元素的基本数据类型,非数组的时候直接field.getType().isPrimitive()判断就行了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-11 14:33:04
报纸

回复 板凳 的帖子

嗯,数组不能用getType得到其类型,需要用getComponentType()来得到。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马