对一个通过反射进行排序的分析
在百度知道看到的,顺便回答了,在这也留一份。
百度知道: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值,使用统计方法如平均值、中位数或卡尔曼...
3. **Collections.sort()**:这是一个静态方法,用于对`List`集合进行排序。当传入`Comparator`时,会根据`Comparator`中的比较逻辑对元素进行排序。 #### 三、代码解析 下面是对上述代码段的详细分析: ```java ...
通过这种方式,我们可以在 Java 中轻松地对 List 集合中的对象按照指定的属性进行排序。这种做法不仅提高了代码的灵活性,而且避免了不必要的数据库操作,从而减少了系统的负担。对于需要频繁进行排序操作的应用来说...
在MVC框架中,权限控制是一个非常重要的功能,它确保了用户只能访问他们被授权的功能模块。本文将详细介绍如何利用反射技术来获取MVC应用中的所有Action方法,并以此为基础实现权限控制。 #### 一、反射的基本概念 ...
现在我们需要编写一个方法来对这些`UserInfo`对象组成的`List`进行排序,而且这个排序方法应该是通用的,即可以轻松地适应对不同字段的排序需求。 #### 三、具体实现 为了实现一个通用的排序方法,我们需要解决...
本资源"反射泛型完美版分页.rar"似乎提供了一个结合了这两种特性的分页解决方案,特别适用于处理大量数据的情况。下面我们将详细探讨反射、泛型以及它们如何应用于分页。 首先,让我们理解什么是反射。反射是Java的...
最接近点对问题是一个经典的计算机算法问题,可以通过蛮力法解决。试卷要求写出蛮力法的伪代码。而连分数计算则要求递归地计算连分数的值。这两部分的内容让学生了解了算法设计中效率和递归计算的重要性。 ### 知识...
在原描述中提到的排序问题,可以使用`Array.Sort()`对类型数组进行排序,但需要一个比较器(Comparator)来根据特定规则(如类型名)进行排序。如果遇到错误,可能是因为需要自定义排序规则。对于获取特定属性、...
"module_qsort.f90"可能是一个排序模块,因为中值滤波需要对窗口内的数据进行排序,找出中位数。快速排序(Quick Sort)是一种常用的排序算法,可能被用于这个模块中,以提高处理速度。 "chuzhi_x_WL.fbp"和"record...
地球引擎保姆级教程——landsat 8 surface reflectance影像集合的波段选择、区域筛选和时间过滤以及云量排序和输出第一幅影像操作Landsat 卫星遥感数据的预处理过程中,云量筛选操作是一个非常重要的步骤。...
首先,我们要了解Delphi作为一个强大的面向对象的编程环境,其核心是Pascal编译器。通过学习Delphi源代码分析,我们可以了解到编译器如何将源代码转化为高效的机器码,这包括词法分析、语法分析、类型检查、优化和...
因此,通过反射机制,可以先存储一个对象的引用,然后将另一个对象的引用赋值给第一个对象的引用,最后将存储的引用赋值给第二个对象的引用,从而实现对象值的交换。 最后,文章强调了这种基于Java反射机制的对象...
`ClassMemberSorter`是一个工具或算法,其目的是根据Java的`Method`和`Class`对象在实际源代码中的行号来对它们进行排序。这样的功能可能在分析代码结构、生成文档或者进行性能优化时非常有用。 `Method`和`Class`...
Java源码分析是软件开发过程中一个重要的学习环节,它能帮助开发者深入理解代码背后的逻辑,提升编程技巧,以及优化程序性能。在这个过程中,我们通常会关注类的设计、算法的应用、数据结构的选择,以及如何利用Java...
例如,在CAD/CAE/CAM集成研究中,通过检测模型对称性,选择模型的一个对称部分进行工程分析,便可以推断出整个模型的分析结果。这样,不仅可以减少工程分析的运算量,还可以加快整个设计和分析流程。 在逆向工程中...
12. **递推式(recurrence relation)**:在解决问题时定义一个关于前几项的关系式。 13. **反向替换法(method of backward substitution)**:求解线性系统的解时,从最后一行开始向前解出未知数的方法。 14. **线性...
这些主成分是原始变量的线性组合,它们按照方差的大小排序,第一个主成分(PC1)解释了最大的方差,第二个主成分(PC2)解释了次大的方差,以此类推。PCA的主要目的是减少数据的维度,同时保持数据集中的大部分信息...
通过以上分析,我们可以看到Java性能优化不仅涉及到集合操作和反射机制的巧妙运用,还涵盖了对象创建的优化和基础编程技巧。对于有经验的Java开发者来说,深入理解并实践这些方法,将显著提升代码质量和系统性能。在...
通过对地震记录中的这些信号进行相位分析,我们可以推断出地震波在地下的传播速度。这种方法特别适用于处理共中心点数据,因为CMP数据能够提供连续的、沿着同一路径的反射信息。 共中心点法是地震资料处理中的一种...