Java对象表示基本语句Statement

Statement 对象表示基本语句,其中将单个方法应用于某一目标和一组参数,以返回结果,比如 "a.setFoo(b)"。注意,此示例使用名称来指示目标及其参数,statement 对象不需要名称空间,可以使用值本身构造。statement 对象将指定方法与其环境相关联,作为值的简单集合:目标和参数值数组。
其构造函数如下:
Statement(Object target, String methodName, Object[] arguments)
          按照所给参数创建一个新的 Statement 对象,使其具有 targetmethodNamearguments

Statement的一个重要方法:
public void execute()throws Exception
execute 方法执行方法找到一个与 methodName 属性同名的方法,并在目标上调用该方法。 当目标的类使用给定名称定义大量方法时,该实现应该使用 Java Language Specification (15.11) 中指定的算法选择最明确的方法。目标和参数的动态类被用于替换编译时类型信息,与 java.lang.reflect.Method 类本身类似,基本值与相关包装器类之间的转换是内部处理的。
以下方法类型被作为特殊情况处理:
  • 可以通过将类对象用作目标来调用静态方法。
  • 使用保留的方法名 "new" 调用类的构造方法,如同所有类都定义了静态 "new" 方法。构造方法调用通常被认为是 Expression 而不是 Statement,因为它们返回一个值。
  • java.util.List 接口中定义的方法名称 "get" 和 "set" 也可以应用于数组实例,映射到 Array 类中的同一名称的静态方法。
使用实例如下:

package com.kkoolerter;

import java.beans.Statement;
import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) throws Exception {
       List<String> lists = new ArrayList<String>();
       lists.add("A");
       lists.add("B");
       lists.add("c");
      
       Main target = new Main();
       Statement statment = new Statement(target,"sayHello",new Object[]{"China"});
       statment.execute();
       System.out.println(statment.toString());
       statment = new Statement(target,"sayHello",new Object[]{});
       statment.execute();
       System.out.println(statment.toString());
       statment = new Statement(Main.class,"staticSayHello",new Object[]{"Static"});
       statment.execute();
       System.out.println(statment.toString());
       statment = new Statement(lists,"add",new Object[]{"1"});
       //System.out.println(statment.execute());
       System.out.println(statment.toString());
       System.out.println(lists.toString());
    }
   
    public void sayHello(String name){
        System.out.println("Hello,"+name);
    }
   
    public void sayHello(){
        System.out.println("Hello,Void");
    }
   
    public static void staticSayHello(String name){
        System.out.println("Hello,"+name);
    }

}
通过查看JDK源码可以知道,execute方法主要是通过getMethod(target.getClass(), methodName, argClasses);方式来获取所要执行的方法对象。

参考文档:JDK中文文档,JDK源码。

你可能感兴趣的:(jdk,职场,休闲)