`
请输入用户名
  • 浏览: 46974 次
  • 性别: 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进行排序;
分享到:
评论

相关推荐

    蓝牙测距并进行排序

    然而,实际环境中,由于信号的反射、折射和吸收,RSSI与距离的关系并不完全线性,因此计算出的距离仅是一个估计值,可能存在较大误差。为了提高精度,可以通过收集多组RSSI值,使用统计方法如平均值、中位数或卡尔曼...

    List 对象属性排序

    3. **Collections.sort()**:这是一个静态方法,用于对`List`集合进行排序。当传入`Comparator`时,会根据`Comparator`中的比较逻辑对元素进行排序。 #### 三、代码解析 下面是对上述代码段的详细分析: ```java ...

    List数据字段排序不关注数据库,直接排序

    通过这种方式,我们可以在 Java 中轻松地对 List 集合中的对象按照指定的属性进行排序。这种做法不仅提高了代码的灵活性,而且避免了不必要的数据库操作,从而减少了系统的负担。对于需要频繁进行排序操作的应用来说...

    mvc通过反射获取action方法(适用于权限控制)

    在MVC框架中,权限控制是一个非常重要的功能,它确保了用户只能访问他们被授权的功能模块。本文将详细介绍如何利用反射技术来获取MVC应用中的所有Action方法,并以此为基础实现权限控制。 #### 一、反射的基本概念 ...

    List对象排序通用方法

    现在我们需要编写一个方法来对这些`UserInfo`对象组成的`List`进行排序,而且这个排序方法应该是通用的,即可以轻松地适应对不同字段的排序需求。 #### 三、具体实现 为了实现一个通用的排序方法,我们需要解决...

    反射泛型完美版分页.rar

    本资源"反射泛型完美版分页.rar"似乎提供了一个结合了这两种特性的分页解决方案,特别适用于处理大量数据的情况。下面我们将详细探讨反射、泛型以及它们如何应用于分页。 首先,让我们理解什么是反射。反射是Java的...

    2014年重庆理工大学《算法分析与设计》三套期末考试试卷.pdf

    最接近点对问题是一个经典的计算机算法问题,可以通过蛮力法解决。试卷要求写出蛮力法的伪代码。而连分数计算则要求递归地计算连分数的值。这两部分的内容让学生了解了算法设计中效率和递归计算的重要性。 ### 知识...

    在VB.net中,利用反射,获得项目中所有公用对象的属性、方法、事件等

    在原描述中提到的排序问题,可以使用`Array.Sort()`对类型数组进行排序,但需要一个比较器(Comparator)来根据特定规则(如类型名)进行排序。如果遇到错误,可能是因为需要自定义排序规则。对于获取特定属性、...

    对地震资料进行中值滤波处理

    "module_qsort.f90"可能是一个排序模块,因为中值滤波需要对窗口内的数据进行排序,找出中位数。快速排序(Quick Sort)是一种常用的排序算法,可能被用于这个模块中,以提高处理速度。 "chuzhi_x_WL.fbp"和"record...

    地球引擎保姆级教程-landsat 8 surface reflectance影像集合的波段选择、区域筛选和时间过滤以及云量

    地球引擎保姆级教程——landsat 8 surface reflectance影像集合的波段选择、区域筛选和时间过滤以及云量排序和输出第一幅影像操作Landsat 卫星遥感数据的预处理过程中,云量筛选操作是一个非常重要的步骤。...

    Delphi源代码分析

    首先,我们要了解Delphi作为一个强大的面向对象的编程环境,其核心是Pascal编译器。通过学习Delphi源代码分析,我们可以了解到编译器如何将源代码转化为高效的机器码,这包括词法分析、语法分析、类型检查、优化和...

    Java对象交换方法剖析.pdf

    因此,通过反射机制,可以先存储一个对象的引用,然后将另一个对象的引用赋值给第一个对象的引用,最后将存储的引用赋值给第二个对象的引用,从而实现对象值的交换。 最后,文章强调了这种基于Java反射机制的对象...

    javaclass源码-classmembersorter:根据Java的Method和Class对象的实际源代码行号对它们进行排序

    `ClassMemberSorter`是一个工具或算法,其目的是根据Java的`Method`和`Class`对象在实际源代码中的行号来对它们进行排序。这样的功能可能在分析代码结构、生成文档或者进行性能优化时非常有用。 `Method`和`Class`...

    Java源码分析及个人总结

    Java源码分析是软件开发过程中一个重要的学习环节,它能帮助开发者深入理解代码背后的逻辑,提升编程技巧,以及优化程序性能。在这个过程中,我们通常会关注类的设计、算法的应用、数据结构的选择,以及如何利用Java...

    特征CAD模型的全局对称的快速识别方法.pdf

    例如,在CAD/CAE/CAM集成研究中,通过检测模型对称性,选择模型的一个对称部分进行工程分析,便可以推断出整个模型的分析结果。这样,不仅可以减少工程分析的运算量,还可以加快整个设计和分析流程。 在逆向工程中...

    算法分析与设计术语表.pdf

    12. **递推式(recurrence relation)**:在解决问题时定义一个关于前几项的关系式。 13. **反向替换法(method of backward substitution)**:求解线性系统的解时,从最后一行开始向前解出未知数的方法。 14. **线性...

    与主成分分析各分量和纹理特征值之间的相关分析.docx

    这些主成分是原始变量的线性组合,它们按照方差的大小排序,第一个主成分(PC1)解释了最大的方差,第二个主成分(PC2)解释了次大的方差,以此类推。PCA的主要目的是减少数据的维度,同时保持数据集中的大部分信息...

    java性能优化方法

    通过以上分析,我们可以看到Java性能优化不仅涉及到集合操作和反射机制的巧妙运用,还涵盖了对象创建的优化和基础编程技巧。对于有经验的Java开发者来说,深入理解并实践这些方法,将显著提升代码质量和系统性能。在...

    Phase_Shift_共中心点_相移法_

    通过对地震记录中的这些信号进行相位分析,我们可以推断出地震波在地下的传播速度。这种方法特别适用于处理共中心点数据,因为CMP数据能够提供连续的、沿着同一路径的反射信息。 共中心点法是地震资料处理中的一种...

Global site tag (gtag.js) - Google Analytics