`
请输入用户名
  • 浏览: 45922 次
  • 性别: Icon_minigender_1
  • 来自: martian
社区版块
存档分类
最新评论

对一个通过反射进行排序的分析

    博客分类:
  • java
阅读更多
对一个通过反射进行排序的分析
在百度知道看到的,顺便回答了,在这也留一份。
百度知道:http://zhidao.baidu.com/question/216983013.html
我为了方便解释、写了一个测试类
/** test for reflex */
public class Model {
 private String name;
 private String content;
 
 public Model(){
  this.name = "my name";
  this.content = "a long text";
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getName() {
  return name;
 }
 public String getContent() {
  return content;
 }
 //测试
 public void test() throws Exception{
  Model model = new Model();
  Method m1 = model.getClass().getMethod("getName", null);
  System.out.println(m1.invoke(model, null));
 }
 public static void main(String args[]){
  try {
   new Model().test("getName");
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

首先调用test,传递一个method过去;

通过反射机制(这里用到了getMethod、invoke,我比较喜欢getField)、获取到m1对象的getName方法,getMethod第一个参数为方法名、第二个是给这个method的参数的类型,
If parameterTypes is null, it is treated as if it were an empty array,如果为null,表示没有参数;(即 getName()方法);

然后在通过 invoke 注入参数;第一个是相应对象的引用、第二个是参数值(刚刚的是类型,现在才是值);
If the underlying method is static, then the specified obj argument is ignored. It may be null,也就是说static的方法第一个参数是null;
我们要调用的是getName(),那么就是 m1.invoke(model,null)了;

执行结果为:my name       ;相当于调用了getName()方法.
绕了一圈也就是 model.getName() == model.getClass().getMethod("getName",null).invoke(model,null);

对于有参数的,调整为
 public void test(String method) throws Exception{
  Model model = new Model();
  Method m1 = model.getClass().getMethod(method, String.class);
  m1.invoke(model, "can you");
  System.out.println(model.getName());
 }

结果:can you

接下来上边的题目就简单了,
public void Sort(List<E> list, final String method, final String sort){
这里给出了method,接下来是一个内部类的处理;自定义一个comparator,

Method m1 = ((E) a).getClass().getMethod(method, null);
这里就是获取method方法,他没有参数。

m1.invoke(((E)a), null).toString()
这里是得到对象a调用方法method之后的返回值。

ret = m1.invoke(((E)a), null).toString().compareTo(m2.invoke(((E)b), null).toString());
而这里就是比较两个对象method方法的返回值

将ret交给sort进行排序;
分享到:
评论

相关推荐

    Java学习总结,目前包括数据结构,算法,设计模式,反射,线程,集合和内部类..zip

    即一个有效的算法必须能在有限步骤内结束,并且对于给定的输入产生唯一的确定输出。 算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra...

    .NET之美:.NET关键技术深入分析

    2.2.3使用泛型的一个小技巧 2.3本章小结 第3章C#中的委托和事件 3.1理解委托 3.1.1 将方法作为方法的参数 3.1.2将方法绑定到委托 3.1.3委托与接口 3.2事件的由来 3.2.1 更好的封装性 3.2.2 限制类型能力 ...

    asp.net知识库

    .NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎...

    JavaScript王者归来part.1 总数2

     11.3.2.1 模拟对话框--创建一个窗口对话框及一个对话框阻塞进行的例子   11.3.2.2 showModalDialog和showModelessDialog--非W3C或ECMAScrip标准   11.3.3 状态栏   11.4 框架--上层的Window对象   11.4.1 ...

    Unity着色器和屏幕特效开发秘笈PDF高清完全版

    移动平台上着色器的优化8.1 引言8.2 什么是轻型着色器8.2.1 准备工作8.2.2 如何操作8.2.3 实现原理8.3 对着色器进行性能分析8.3.1 准备工作8.3.2 如何操作8.3.3 实现原理8.3.4 更多内容8.4 移动平台上的...

    华为内部java考题

    (1)常用的集合类,如Set、Map、List,以及常用的查找、遍历、排序操作; (2)多线程同步机制; (3)文件读写; (4)XML解析、基本的正则表达式; (5)类的加载和反射机制 (6)软件的需求分析以及逻辑思维能力...

    ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)ECG4.3.pdf

    1、获取一个实体对象信息 6 2、插入一个实体对象信息 6 3、更新一个实体对象信息 6 4、保存一个实体对象信息 6 5、删除一个实体对象信息 7 6、取得实体映射表数值字段的最大值+1 7 2.2.2 多个实体对象的数据库操作 7...

    中美 IT 培训 C# Asp.net 全套笔记1

    (120课时) 在培训老师的指导下完成一个实际的电子商务软件项目:” Prepaid Phone Card Online Sales System”。内容包括:Application Architecture Analysis、Creating the Data Model、Design Database Schema、...

    超轻空间相机主支撑背板的优化设计

    最后利用有限元分析对优化结果进行动、静力学性能分析。结果表明:在5 ℃温升载荷下,反射镜组件镜面面形方均根为0.158 nm,具有良好的热稳定性;在X向重力载荷作用下(与光轴垂直方向/面形检测方向),镜面面形的方均...

    中美 IT 培训 C# Asp.net 笔记2

    (120课时) 在培训老师的指导下完成一个实际的电子商务软件项目:” Prepaid Phone Card Online Sales System”。内容包括:Application Architecture Analysis、Creating the Data Model、Design Database Schema、...

    中美 IT 培训 C# Asp.net 笔记3

    (120课时) 在培训老师的指导下完成一个实际的电子商务软件项目:” Prepaid Phone Card Online Sales System”。内容包括:Application Architecture Analysis、Creating the Data Model、Design Database Schema、...

    net学习笔记及其他代码应用

    8.请编程实现一个冒泡排序算法? 答: int [] array = new int ; int temp = 0 ; for (int i = 0 ; i ; i++) { for (int j = i + 1 ; j ; j++) { if (array[j] ) { temp = array ; array = array[j] ; ...

    值类型与引用类型理论内容.part01.rar

    制作一个通讯录;2。制作一个小游戏;3。教学管理系统。 通过实际项目深入理解和掌握C# 基本语法、面向对象的思想、类的概念和使用、对象的创建、排序、IO操作等 数据库知识和 SQL Server 2000 (40课时) 讲授...

    java8集合源码分析-javaInterview:java面试

    java怎么加载一个类? 反射怎么加载类? wait notify为什么放在 Object 下? java几个类加载器? 类加载方式? 动态代理和静态代理的区别? jdk哪个接口实现动态代理? 自定义注解? 怎么写? spring 的事务管理机制是什么...

    Digital Color Image Processing

    从矢量值的视角对彩色图像进行处理所需要的基础与要求,彩色图像预处理所需要的技术,利用彩色信息的三维场景分析,以及多光谱图像处理中的新兴领域 通过对两个事例研究的考察来介绍彩色图像处理的应用。 作者简介 ...

    值类型与引用类型理论内容.part05.rar

    制作一个通讯录;2。制作一个小游戏;3。教学管理系统。 通过实际项目深入理解和掌握C# 基本语法、面向对象的思想、类的概念和使用、对象的创建、排序、IO操作等 数据库知识和 SQL Server 2000 (40课时) 讲授...

    wpf源码大全 精通C#3.0图书源码 详细源码 学习好用

    QueryOrderElement 演示通过XElement对XML元素进行排序。 QuerySubElement 演示通过XElement查询XML元素的子元素。 LoadXMLTree 演示通过XElement加载XML树。 第7章(\C07) 示例描述:本章介绍了WPF的...

Global site tag (gtag.js) - Google Analytics