`
rocket
  • 浏览: 92272 次
  • 性别: Icon_minigender_1
  • 来自: 金城
社区版块
存档分类
最新评论

根据name调用getName方法

 
阅读更多
问题是这样的,我看到原来有一个方法是根据name的名称调用getName()这个方法。
然后方法的实现是使用字符串的判断来实现的
代码如下:
public Object getOrderby() {
        
if (ORDER_TITLE.equals(this.ordered)) {
            
return getTitle();
        }
 else if (ORDER_RENDERDATE.equals(this.ordered)) {
            
return getRenderDate();
        }
 else if (ORDER_CREATEDATE.equals(this.ordered)) {
            
return getCreateDate();
        }
 else if (ORDER_LASTMODIFIED.equals(this.ordered)) {
            
return getLastModified();
        }
 else {
            
return getTitle();
        }

    }

这样的话如果以后新增get方法就意味着要增加这个getOrderby()方法的判断。
所以我决定用类反射来改造这个方法,首先定义一个doGetMethod的方法
 private Object doGetMethod(String methodName) throws Exception {
        Object result 
= null;
        Object[] eo 
= new Object[] {};
        String getMethodName 
= "get" + methodName.toLowerCase();
        Method[] methods 
= getClass().getMethods();
        
for (int i = 0; i < methods.length; i++{
            Method method 
= methods[i];
            
if (getMethodName.equals(method.getName().toLowerCase())) {
                result 
= method.invoke(this, eo);
            }

        }

        
return result;
    }
这里根据methodName组合成getMethodName,然后到Method[]中找这个Method,然后用invoke调用这个方法
这里要说明invoke这个方法的参数是第一个参数是指定包含方法的类,第二个参数是指定方法需要的参数。
最后修改原来的getOrderBy
  public Object getOrderby() {
        Object obj 
= getTitle();
        
try {
            obj 
= doGetMethod(getOrdered());
        }
 catch (Exception e) {
            
return obj;
        }

        
return obj;
    }


rocket 2007-04-12 15:36 发表评论
分享到:
评论

相关推荐

    Java反射根据不同方法名动态调用不同的方法(实例)

    在本实例中,主要讨论如何根据方法名动态调用Java对象的方法。 首先,我们有一个`Person`类,它包含了五个属性:`name`, `age`, `address`, `phoneNumber`, 和 `sex`。每个属性都有对应的getter和setter方法。这是...

    七步实现directjngine、Ext Direct调用Java服务器端方法 directjngine官方demo精简版

    本教程将通过七个步骤,介绍如何使用DirectJNgine和Ext Direct来调用Java服务器端的方法,帮助你理解和实践这两种技术。 第一步:了解DirectJNgine和Ext Direct DirectJNgine是基于Spring框架的,它提供了对Ext ...

    PHP静态调用非静态方法的应用分析

    `会尝试访问`$app`对象的`name`属性,即使`getName()`方法是非静态的。 总结来说,尽管PHP允许静态调用非静态方法,但这可能会导致意外的结果和编码规范错误。为了避免这些问题,最佳实践是始终明确区分静态和非...

    定义一个Document类,包含成员变量name,从Document派生出Book类,增加PageCount变量。编写主函数

    - **成员方法**:用于操作成员变量的方法称为成员方法,例如`getName()`和`setName()`。 ### 2. 继承的概念与应用 继承是面向对象编程中的一个重要特性,它允许我们定义一个类来继承另一个类的属性和方法。这样...

    java反射获取和调用方法

    在上面的代码中,我们首先获取了 `Person` 类的 `Class` 对象,然后通过 `getDeclaredMethod` 方法获取了 `getName` 方法,最后通过 `invoke` 方法调用了该方法,并传入了 `"zhangsan"` 作为参数。 三、多个参数的...

    eightyxy.zip

    定义3个重载方法max,第一个方法求两个int值中的最大值,第2个方法求三个int值中的最大值,第3个方法求四个int值中的最大值,并分别调用三个方法 练习6(基础): 定义Person类,有3个属性:String name; int age; ...

    example2.zip

    在上述代码中,setName方法返回this,使得我们可以立即调用getName方法,这就是链式调用的魅力。这种方法在构建复杂的API时特别有用,因为它允许我们以优雅的方式组合多个操作。 接下来,让我们看看链式扩展类在...

    java面向对象编程(OOP)中类的定义示例代码、对象的创建和方法的调用等基本概念.txt

    `:调用`student`对象的`setName`和`setAge`方法,修改学生的姓名和年龄。 - 再次调用`student.printInfo();`:打印出更新后的学生信息。 #### 面向对象的基本概念总结 本示例代码展示了面向对象编程中的几个核心...

    Python子类继承父类构造函数详解

    如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。 子类不重写 __init__,实例化子类时,会自动调用父类定义的 __init__。 class Father(object): def __init__(self, ...

    kotlin反射方法教程文档kotlin反射方法教程文档

    // 调用 getName 方法 val name = getMethodValue(person, "name") println("Name: $name") // 调用 getAge 方法 val age = getMethodValue(person, "age") println("Age: $age") } fun &lt;T&gt; createObject...

    间接调用Log4j的日志功能导致类名输出错误解决方案

    例如,可以使用`Thread.currentThread().getStackTrace()`获取堆栈信息,然后找到日志方法被调用的位置,获取到正确的类名。 ```java public class MyLoggerFactory { public static Logger getLogger(Class&lt;?&gt; ...

    JavaScript 继承详解(六)

    // 调用父类的getName方法 } }); var zhang = new Employee("ZhangSan", "1234"); console.log(zhang.getName()); // 输出 "Employee name: ZhangSan" ``` `$super`变量的使用简化了子类对父类方法的调用,但其...

    java与groovy互相调用1

    由于Groovy的动态特性,它能够自动处理Java类中的私有方法和属性,因此可以直接访问`getName()`和`setName()`等方法,这在Java中通常是不允许的。 这种互操作性主要得益于Groovy的MetaObjectProtocol (MOP) 和...

    Hibernate 调用存储过程

    ### Hibernate调用存储过程...通过以上步骤,我们可以有效地使用Hibernate来调用数据库中的存储过程,并根据需要处理返回的数据。这种方法不仅提高了代码的可维护性和扩展性,而且还能充分利用数据库本身的性能优势。

    跟我学习javascript的this关键字

    在这个例子中,`getName`作为`xpg`对象的方法被调用,因此`this`指向`xpg`对象,返回`xpg`对象中`name`属性的值。 3. 闭包中的`this` 闭包是JavaScript中的一个重要概念,它是指在一个函数内部创建另一个函数,新...

    调用存储过程

    System.out.println("Employee Name: " + emp.getName()); System.out.println("Employee Department: " + emp.getDepartment()); } catch (SQLException e) { e.printStackTrace(); } } } ``` 在这个例子中...

    Java语言基础入门教程 Java实训教程 5.类属性及类方法定义 共40页.pptx

    // 调用getName()方法 ``` ##### 4. 抽象方法 抽象方法使用`abstract`关键字定义,没有方法体。含有抽象方法的类必须声明为抽象类。 示例: ```java public abstract class Animal { public abstract void ...

    javabean的最简单调用

    创建一个简单的JavaBean,如`UserBean`,包含两个属性`name`和`age`,并提供对应的getter和setter方法: ```java public class UserBean implements Serializable { private String name; private int age; ...

Global site tag (gtag.js) - Google Analytics