Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

利用Java反射获取类的私有变量值

$
0
0

从设计的原则来说,类的成员变量如果设计成private,那么我们就不能在类外部去获取到此private变量的值。通常的做法是提供此private变量的get 和set方法。但是如果这个类没有提供get和set方法,我们如何去获取到这个类的private成员变量呢?比如有这么一个类 Person:

class Person{
	private String name = "cross";
}

我们如何不在这个类中来获取到name的值呢?通过java的反射机制可以获取的,注意这里会对name这个field设置下field.setAccessible(true), 我们才能访问private变量

package com.withiter.test;

import java.lang.reflect.Field;

public class ReflectTest {

	public static void main(String[] args) {
		try {
			Class<?> obj = Class.forName("com.withiter.test.Person");
			Field[] f = obj.getDeclaredFields();
			for(Field field : f){
				field.setAccessible(true);
				System.out.println(field.getName()+":"+field.get(obj.newInstance()));
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

class Person{
	private String name = "cross";
}



作者:huxiweng 发表于2013-4-27 15:51:41 原文链接
阅读:34 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>