ASMSupport教程4.10 instanceof操作符生成

<p>instanceof是判断对象是否是某种类型的,我们可以看下下面的代码:</p> <div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:4f2d1c23-092c-4b0f-888f-8ada43241043" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 665px; height: 295px;" style=" width: 665px; height: 295px;overflow: auto;">package generated.operators;

import java.io.PrintStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List;

public class InstanceofOperatorGenerateExample { public static void main(String[] args) { System.out.println("String" instanceof CharSequence); System.out.println(new ArrayList() instanceof List); System.out.println(new HashMap() instanceof List); } }</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>

<p>我们知道,这段代码打印出来的是</p> <p>true</p> <p>true</p> <p>false</p> <p>下面我们用ASMSupport生成上面的代码</p> <div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:db04b8b1-814b-43de-b6a9-94197acd931e" class="wlWriterEditableSmartContent" style="float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 665px; height: 861px;" style=" width: 665px; height: 861px;overflow: auto;">package example.operators;

import java.util.ArrayList; import java.util.HashMap; import java.util.List;

import jw.asmsupport.block.method.common.StaticMethodBody; import jw.asmsupport.clazz.AClass; import jw.asmsupport.clazz.AClassFactory; import jw.asmsupport.creator.ClassCreator; import jw.asmsupport.definition.value.Value; import jw.asmsupport.definition.variable.LocalVariable;

import org.objectweb.asm.Opcodes;

import example.AbstractExample;

public class InstanceofOperatorGenerate1 extends AbstractExample {

1public static void main(String[] args) { 2 3 ClassCreator creator = new ClassCreator(Opcodes.V1_5, Opcodes.ACC_PUBLIC , &quot;generated.operators.InstanceofOperatorGenerateExample&quot;, null, null); 4 5 /* 6 * 生成一个main方法 7 */ 8 creator.createStaticMethod(&quot;main&quot;, new AClass[]{AClassFactory.getProductClass(String[].class)}, new String[]{&quot;args&quot;}, null, null, 9 Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, new StaticMethodBody(){ 10 11 @Override 12 public void generateBody(LocalVariable... argus) { 13 invoke(systemOut, &quot;println&quot;, instanceOf(Value.value(&quot;String&quot;), AClassFactory.getProductClass(CharSequence.class))); 14 invoke(systemOut, &quot;println&quot;, instanceOf(invokeConstructor(AClassFactory.getProductClass(ArrayList.class)), 15 AClassFactory.getProductClass(List.class))); 16 invoke(systemOut, &quot;println&quot;, instanceOf(invokeConstructor(AClassFactory.getProductClass(HashMap.class)), 17 AClassFactory.getProductClass(List.class))); 18 runReturn(); 19 } 20 }); 21 generate(creator); 22}

}</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>

<p>这里面instanceof操作对于的方法是instanceOf,具体如下:</p> <p><strong><font color="#f79646">jw.asmsupport.block.ProgramBlock.instanceOf(Parameterized obj, AClass type)</font></strong> ,这个方法有两个参数:</p> <ol> <li>instanceof左边的参数,是一个对象。</li> <li>AClass类型,instanceof右边的参数。</li></ol> <p>AClass是ASMSupport的特有的类型,详细可以见博客<a href="http://www.wensiqun.com/2013/06/08/asmsupport\_tutorial\_1.html">ASMSupport教程1之动态生成接口</a>。</p> <p>执行这段代码,也是:</p> <p>true</p> <p>true</p> <p>false</p>
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

swap空间的增减方法

(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap