黑马程序员技术交流社区
标题:
java 反射 + 类型转换???
[打印本页]
作者:
刘林虎
时间:
2013-4-9 22:29
标题:
java 反射 + 类型转换???
本帖最后由 刘林虎 于 2013-4-9 22:31 编辑
public void handleMessage(Message msg) {
TransactionBundle args = (TransactionBundle) msg.boj;
int transactionType = args.getTransactionType();
...
}
现在我要实现上面这个方法里面的代码,但是温室是TransactionBundle这个类只能通过反射的方式加载,要怎么实现上面的效果呢?
求大神指教!!!
复制代码
作者:
牛海亮
时间:
2013-4-10 00:09
package cn.itcast.reflect;
import java.lang.reflect.*;
import java.util.Arrays;
public class ReflectTest
{
public static void main(String[] args) throws Exception
{
Person p = new Person("张三",12);
getObject(p);
}
//通过反射获得属性对应的get方法,传入对象,即可打印出所有属性对应的值。
public static void getObject(Object object)
{
try
{
//获取传进来的映射对象
Class c = object.getClass();
//取得对象的所有属性,放到一个数组中
Field[] f = c.getDeclaredFields();
for(int i = 0; i<f.length; i++)
{
//获取对象的属性
String fieldName = f[i].getName();
//拼接出来访问器名字
String name = "get"+firUpCase(fieldName);
//System.out.println(name);
//获取名字是name的方法。
Method m = c.getMethod(name);
//映射后的对象的方法 对象调用invoke()方法,实现它在原对象中对应的方法,这里实现的是get方法。
System.out.println(m.invoke(object));
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static String firUpCase(String fieldName)
{
String changed = null;
int temp = 0;
char [] fn = fieldName.toCharArray();
temp = (int)fn[0]-32;
if(temp>64&&temp<91)
{
fn[0] = (char)temp;
}
changed = new String(fn);
return changed;
}
}
复制代码
作者:
牛海亮
时间:
2013-4-10 00:09
package cn.itcast.reflect;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
// TODO Auto-generated constructor stub
}
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;
}
}
复制代码
作者:
牛海亮
时间:
2013-4-10 00:15
这是一个通过反射获取Person类属性值的例子,希望能对你有帮助。
firUpCase()这个方法是为了把字符串首字母转换成大写的。
作者:
牛海亮
时间:
2013-4-10 00:22
你把args传进getObject(args),它对应的所有属性的值就都出来了.要想获得某个属性的值,可在该函数第一行后写if(fieldName.equals(属性名称))将其筛选出来。
作者:
牛海亮
时间:
2013-4-10 00:26
//具体写法为
if(fieldName.equals(属性名称)))
{
//拼接出来访问器名字
String name = "get"+firUpCase(fieldName);
//System.out.println(name);
//获取名字是name的方法。
Method m = c.getMethod(name);
//映射后的对象的方法 对象调用invoke()方法,实现它在原对象中对应的方法,这里实现的是get方法。
System.out.println(m.invoke(object));
}
复制代码
作者:
黄玉昆
时间:
2013-4-11 19:50
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2