在这个部分内容中,我们将介绍如何使用asmsupport来创建各种操作以及class。首先会介绍一下java中的基本操作在asmsupport中如何实现(在这个过程中会简单的使用asmsupport创建一个类来支持这些操作),然后再介绍如何创建一个class,方法,属性,最后再介绍如何创建各种程序块。在介绍这些之前,先来了解下asmsupport的一些基本类型。
ArrayClass是ASMSupport对java中数组类型的一个封装,比如int[], String[][]。 对应的在ArrayClass中我们也需要保存数组的相关的信息,比如数组的维度,数组的基本类型等等
这个类主要是用来表示已经存在的class,也就说已经存在于虚拟机中的class,比如java.lang.String或者我们随便创建的某个class,在asmsupport中都将抽象成ProductClass,我们称之为成品类
这个接口定义了基本数据类型的值,通常可以理解为允许进入常量池的值。比如基本类型,boolean,true. 数字类型1,2,2.1 等等,除了基本类型还有字符串类型的值以及Class对象。
Asmsupport的总体思想就是,尽可能的还原真实代码的结构。所以在asmsupport中将会大量使用匿名类的方式。比如下面的代码:
new MethodBody() {
    public void body(LocalVariable... args) {//方法开始
        //位置1
        if_(new IF(condition){
            public void body(){//if块开始
                //位置2
                LocalVariable name = var("name", String.class, val("asmsupport"))
            }//if块结束
        }).elseif(new Else(){
            public void body(){//else块开始
                //位置3
            }//else块开始
        })
    }//方法体结束
};
上面的代码正好对应于java代码
public void test(){
    //位置1
    if(condition) {//if开始
        //位置2
        String name = "asmsupport";
    } else {//else 开始
        //位置3
    }
}
使用这种方式还有一个原因。在使用asm的时候整个局部变量对开发者是开放的,那么程序可以在任意时刻访问任意位置的局部变量,比如在上面代码中的位置3获取位置2定义的变量name。采用这种方式就避免了这种问题。