ASMSupport教程4.2

Stella981 等级 154 0 0
标签:

4.2 生成Return操作

这一节我们将讲述如何生成return操作,我们将生成如下代码:

package generated.operators;

import java.io.PrintStream;

public class ReturnOperatorGenerateExample { public static String commonMethod() { return "I'm from commonMethod"; }

public static void main(String[] args) { System.out.println(commonMethod()); } }

这段代码的两个方法的返回类型分别是String和void,对应的ASMSupport的代码如下:

public static void main(String\[\] args) { ClassCreator creator = new ClassCreator(Opcodes.V1\_5, Opcodes.ACC\_PUBLIC , "generated.operators.ReturnOperatorGenerateExample", null, null);

/* 
 * 有返回类型的方法
 */
creator.createStaticMethod("commonMethod", null, null, AClass.STRING_ACLASS, null, Opcodes.ACC_PUBLIC, new StaticMethodBody(){
    @Override
    public void generateBody(LocalVariable... argus) {
        runReturn(Value.value("I'm from commonMethod"));
    }
});
    
/* 
 * 无返回类型的方法
 */
creator.createStaticMethod("main", new AClass[]{AClassFactory.getProductClass(String[].class)}, new String[]{"args"}, null, null,
        Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, new StaticMethodBody(){
    @Override
    public void generateBody(LocalVariable... argus) {
        invoke(systemOut, "println", invokeStatic(getMethodOwner(), "commonMethod"));
        runReturn();
    }
});
generate(creator);

}

这里我们主要关注的是runReturn(Value.value("I'm from commonMethod"))和runReturn(),前者是非void的,参数就是我们方法需要返回的值,后者就是直接return,没有返回值。

收藏
评论区

相关推荐

4.2 手写Java PriorityQueue 核心源码
上一节介绍了PriorityQueue的原理,先来简单的回顾一下 PriorityQueue 的原理 以最大堆为例来介绍 1. PriorityQueue是用一棵完全二叉树实现的。 2. 不但是棵完全二叉树,而且树中的每个根节点都比它的左右两个孩子节点元素大 3. PriorityQueue底层是用数组来保存这棵完全二叉树的。 如下图,是一棵最大堆。
TypeScript 4.2 有哪些新特性
TypeScript 4.2 发布了!对于不熟悉 TypeScript 的人来说,TypeScript 就是增加了静态类型和类型检查的 JavaScript。有了类型限制,你就可以精确的表达你的函数需要什么类型的参数以及返回什么类型的结果。同时,利用 TypeScript 的类型检查,你可以很容易避免一些常见错误,例如拼写错误或者忘记处理 null 和 un
Java Review(三十四、JDBC)
### 文章目录 * [1、JDBC典型用法](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fblog.csdn.net%2Fsinat_40770656%2Farticle%2Fdetails%2F103335871%231JDBC_5) * * [1.1、JDBC 4.2
ASMSupport局部变量的实现
#局部变量的实现 > [git@osc地址](http://git.oschina.net/wensiqun/asmsupport) 在字节码层面,每一个方法都有一个局部变量数组,用来存储当前方法的参数,在方法内声明的变量,如果是非静态方法还要存储当前方法实例的引用this。在我们平时使用java的时候,这个局部变量的大小是在源码编译成class的时候就
ASMSupport教程4.12 生成方法调用操作
<p>这一节我们讲如何用ASMSupport生成方法调用的操作,方法调用包括下面四种类型:</p> <ol> <li>调用构造方法 <li>调用静态方法 <li>调用非静态方法 <li>调用当前类的方法 <li>调用父类方法</li></ol> <p>首先我们需要看我们想要生成的类:</p> <p>代码1:</p> <h3> <div id="scid:9D
ASMSupport教程4.2
<h2>4.2 生成Return操作</h2> <p>这一节我们将讲述如何生成return操作,我们将生成如下代码:</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; pa
ASMSupport教程4.4 自增减操作(++,
<h2>4.4 自增减操作(++,—)</h2> <p>我们知道,++和--是各种编程语言的基本操作,其作用就不解释了,直接进入正题,我们希望生成如下代码</p> <div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:030ff93f-6abb-4574-b183-2e855d30580b" class="wl
ASMSupport教程4.5 在Class中生成算术运算符
<h2>ASMSupport教程4.5 在Class中生成算术运算符</h2> <p>这节我们开始介绍ASMSupport如何生成算数运算符(+-\*/%),依旧先看我们需要生成的java代码:</p> <div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:22b13b06-a0d6-4b8e-b7cd-768
ASMSupport教程4.8 生成逻辑运算操作
<p>在java中有以下逻辑运算符:</p> <ul> <li>&amp;&amp;:条件与 </li> <li>||:条件或 </li> <li>&amp; : 布尔型的逻辑与 </li> <li>| : 布尔型的逻辑或 </li> <li>^ : 布尔型的逻辑异或 </li> <li>! : 非操作 </li> </ul> <p>那么接下来我们将些段例子
ASMSupport教程4.9 生成三元运算符
<p>这节我们介绍如何用ASMSupport生成三元运算符(... ? ... : ... )运算符。我们预计生成如下代码:</p> <div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:935e30cc-3321-4e00-93ba-9834f3a4e044" class="wlWriterEditableS
ClickHouse20.3 安装
1、检查环境 ====== 1.1、linux版本 ----------- [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) 1.2、SSE 4.2 ----------- [root@localhost
Idea破解
Idea破解 ====== Idea企业版解压版 ideaIU-2018.3.4.win JetbrainsIdesCrack-4.2-release.jar 破解步骤 ---- 一、JetbrainsIdesCrack-4.2-release.jar ,通常放入 $IDEA\_HOME/bin 目录下。 二、修改
PHP 类型转换函数intval
<?php echo intval(42); // 42 echo intval(4.2); // 4 echo intval('42'); // 42 echo intval('+42'); // 42 echo intval('-42'); // -42 echo intval(042)
Spring Framework 4.2 中的新功能和增强功能
本文同不至[http://www.waylau.com/new-features-and-enhancements-in-spring-framework-4.2/](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.waylau.com%2Fnew-features-and-enhan
SpringMVC 4.2 对跨域的支持
Cross-origin resource sharing (CORS) is a W3C specification implemented by most browsers that allows you to specify in a flexible way what kind of cross domain requests are authori