集合和反编译间的深入理解和认识
来源:互联网 发布:扫一扫软件免费下载 编辑:程序博客网 时间:2024/05/18 05:20
//解决通过输入对象的属性值来反编译输出属性的名字和方法对应的值的思维
/*
充分利用好f增强型的for循环和集合类以及反编译的只是,并且对集合以及反编译有较深的理解(重要)
1:设置方法取得属性名并存在一个集合中
2:利用增强for循环来实现对方法的获取
3:设置方法来取得方法的名字以便下面的反向激活
4:反向激活方法,获得其所需的值
5:把属性和值输出显示
*/
import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class Test8 {//测试类
public static void main(String[] args) throws SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
List<Student>class1=new ArrayList<Student>();
for(int i=1;i<=5;i++){
class1.add(new Student("张"+i,i,20));
}
List<Map<String,String>> list=ObjectConverterUtil.objectConverter(class1, Student.class);
int i=1;
for(Map<String,String>map:list){
System.out.println("第"+i+"个对象如下");
for(Entry<String,String>set:map.entrySet()){
System.out.println(set.getKey()+"\t"+set.getValue());
}
System.out.println();
i++;
}
}
}
public class ObjectConverterUtil {
public static <E>List<Map<String ,String>>objectConverter(List<E>list,Class c) throws SecurityException, NoSuchMethodException, IllegalArgumentException,IllegalAccessException, InvocationTargetException{ //抛出必备的异常
List<Map<String,String>> result=new ArrayList<Map<String,String>>(); //用list保存结果,父类引用指向子类的对象,体现了多态的特征
//1:取出e中的反射实例,=》取出所有的属性名
List<String> propertyNames=getPropertyName(c); // 调用方法取得属性名字
for(E e:list){
Map<String,String>map=new HashMap<String,String>();//增强型的for循环
for(String propertyName:propertyNames){
String methodName=getMethodName(propertyName); //通过属性名调用带有属性名字参数的方法以获得方法名字
Method m=e.getClass().getMethod(methodName, null);//获得方法的详细解析,名字和参数
Object obj=m.invoke(e,null);//激活获得的方法
map.put(propertyName, obj.toString());//吧属性和方法的结果放到map中
}
result.add(map); //将map加到result中输出
}
return result;、、放回result作为最终结果
}
private static List<String>getPropertyName(Class c){
List<String>propertyNames=new ArrayList<String>();
Field []fs=c.getDeclaredFields();
if(fs!=null&&fs.length>0){
for(Field s:fs){
propertyNames.add(s.getName());//获取属性的名字
}
}
return propertyNames;
}
private static String getMethodName(String propertyName){
//String getMethodNames;
StringBuffer b=new StringBuffer();//对方法的拼接
String getMethodNames=b.append("get")+propertyName.substring(0, 1).toUpperCase()+propertyName.substring(1);
return getMethodNames;
}
}
0 0
- 集合和反编译间的深入理解和认识
- HDFS的认识和理解
- Angularjs的理解和认识
- 深入理解和认识Gcoge 酷鸽新媒体 www.gcoge.com
- equal和hashcode的深入认识
- session和cookie的深入认识
- android 混淆,反编译,反破解的简单说明和认识
- 理解和认识udev
- 理解和认识udev
- 理解和认识udev
- 理解和认识udev
- 理解和认识udev
- 理解和认识udev
- 理解和认识udev
- 理解和认识udev
- 理解和认识udev
- 理解和认识udev
- 理解和认识udev
- 如何研究源代码
- hdu 3264 Open-air shopping malls 2009 Asia Ningbo Regional Contest Hosted by NIT
- JeeSite
- 程序员怎样学习英语
- 在MyEclipse中配置tomcat
- 集合和反编译间的深入理解和认识
- IT面试题---如何确定一棵二叉树是另一棵二叉树的子树(2)
- H264 TS/ES
- linux操作命令
- LeetCode: LRU Cache
- Girl_iOS100天学iOS的第十天(单例和通知)
- 批处理学习教程
- 程序员牛人跳槽
- 为什么很多程序员都选择跳槽?