java如何利用反射机制得到一个类中为数组类型的成员变量的值

RT,我想要得到一个类中为数组类型变量的值,我在Field的API中找到一个get()方法,但是貌似得到的是这个数组的引用(一个象内存地址的字串),该怎么拿到里面的值呢?... RT, 我想要得到一个类中为数组类型变量的值,我在Field的API中找到一个get()方法,但是貌似得到的是这个数组的引用(一个象内存地址的字串),该怎么拿到里面的值呢?先谢谢各位了。 展开
 我来答
百度网友090def6
推荐于2016-06-06 · TA获得超过2211个赞
知道小有建树答主
回答量:558
采纳率:100%
帮助的人:709万
展开全部

写了个例子,请仔细查看代码,具体过程需要你自己对照java API 再研究,


先定义了一个普通的学生类,如下:

public class Student {
private int id;
private String name;
private int age;
private String[] aiHao;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String[] getAiHao() {
return aiHao;
}
public void setAiHao(String[] aiHao) {
this.aiHao = aiHao;
}
}

对学生类进行反射

public class Test3 {
public static void main(String[] args) {
Student s = new Student();
s.setId(1);
s.setName("张三");
s.setAge(23);
s.setAiHao(new String[] { "足球", "篮球", "上网" });
try {
// 获取所有的变量
Field[] fields = Student.class.getDeclaredFields();
// 循环处理变量
for (Field f : fields) {
f.setAccessible(true);
Object value = f.get(s); // 取变量的值
System.out.print("变量名称为:" + f.getName());
if (value.getClass().isArray()) { // 判断是否是数组
Object[] arr = (Object[]) value; // 装换成数组
System.out.println(",变量值等于:" + Arrays.toString(arr));
// 这里还可以做额外处理,判断数组的类型 如下面注释的代码
/*
for (Object a : arr) {
System.out.println("参数类型" + a.getClass().getName());
// 同样运用反射的机制做额外处理
}
*/
} else {
// 非数组类型,普通处理
System.out.println(",变量值等于:" + value);
}
f.setAccessible(false);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
100251733802
推荐于2017-11-26 · TA获得超过252个赞
知道小有建树答主
回答量:438
采纳率:33%
帮助的人:117万
展开全部
package cn.baayong.thread;

import java.lang.reflect.Method;

// 2014-2-26 下午02:18:17 created by haobo56
public class Test {
public static void main(String[] args) {
//构造对象
User user = new User();
String strs[] ={"1","2","3"};
user.setStrs(strs);

Method[] methods = user.getClass().getMethods();
for(Method m:methods){
String methodNames= m.getName();
if(methodNames.equals("getStrs")){
try {
Object obj =m.invoke(user, new Object[]{});
if(obj instanceof java.lang.String []){
String tempstrs [] =(String[]) obj;
for(String str:tempstrs){
System.out.println(str);
}
}
} catch (Exception e) {
e.printStackTrace();

}
}
}
}
class User{
private String strs[];

public String[] getStrs() {
return strs;
}

public void setStrs(String[] strs) {
this.strs = strs;
}
}


希望你采纳。 谢谢。 

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
狼破浪
推荐于2018-02-27 · TA获得超过470个赞
知道小有建树答主
回答量:324
采纳率:100%
帮助的人:168万
展开全部

package com.cs.gang;

import java.lang.reflect.Field;

/**
 * Created by IntelliJ IDEA.
 * User: gang-liu
 * Date: 2/26/14
 * Time: 2:12 PM
 */
public class ReflectTest {

    private String[] strData;
    private int[] intData;

    public ReflectTest() {
        strData = new String[]{"one", "two", "three"};
        intData = new int[]{1, 2, 4, 5, 6};
    }

    public ReflectTest(String[] strData, int[] intData) {
        this.strData = strData;
        this.intData = intData;
    }

    public String[] getStrData() {
        return strData;
    }

    public void setStrData(String[] strData) {
        this.strData = strData;
    }

    public int[] getIntData() {
        return intData;
    }

    public void setIntData(int[] intData) {
        this.intData = intData;
    }

    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        final ReflectTest test = new ReflectTest();
        final Field strField = ReflectTest.class.getDeclaredField("strData");
        strField.setAccessible(true);
        final String[] data = (String[]) strField.get(test);
        for(final String d : data){
            System.out.println(d);
        }

        final Field intField = ReflectTest.class.getDeclaredField("intData");
        intField.setAccessible(true);
        final int[] intDatas = (int[]) intField.get(test);
        for(final int intData : intDatas){
            System.out.println(intData);
        }
    }


}

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
逝去如流水
2019-04-15
知道答主
回答量:8
采纳率:0%
帮助的人:7095
展开全部
Field array=heap2.getClass().getDeclaredField("array");
array.setAccessible(true);
int[] arr=(int[])array.get(heap2);
System.out.println(Array.get(arr,2));//读取下标2数组元素
Array.set(arr,2,0);//修改下标2数组元素
array.set(heap2,arr);//赋值给对象heap2成员变量array
array.set(heap2,null);//置对象heap2成员变量数组为null
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
历盆郁7
2014-02-26 · TA获得超过4277个赞
知道大有可为答主
回答量:1795
采纳率:100%
帮助的人:948万
展开全部
我估计你没有创建对象吧,反射,只是分析这个类的功能(具备的方法和属性),他是死的.只有创建了对象后,才有生命,才是获得,才能拿到里面的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式