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;html

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

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>web

<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;ide

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

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;code

import org.objectweb.asm.Opcodes;orm

import example.AbstractExample;htm

public class InstanceofOperatorGenerate1 extends AbstractExample {對象

public static void main(String[] args) {
    
    ClassCreator creator = new ClassCreator(Opcodes.V1_5, Opcodes.ACC_PUBLIC , &quot;generated.operators.InstanceofOperatorGenerateExample&quot;, null, null);
	
	/*
	 * 生成一個main方法
	 */
	creator.createStaticMethod(&quot;main&quot;, new AClass[]{AClassFactory.getProductClass(String[].class)}, new String[]{&quot;args&quot;}, null, null,
			Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, new StaticMethodBody(){

		@Override
		public void generateBody(LocalVariable... argus) {
			invoke(systemOut, &quot;println&quot;, instanceOf(Value.value(&quot;String&quot;), AClassFactory.getProductClass(CharSequence.class)));
			invoke(systemOut, &quot;println&quot;, instanceOf(invokeConstructor(AClassFactory.getProductClass(ArrayList.class)),
					AClassFactory.getProductClass(List.class)));
			invoke(systemOut, &quot;println&quot;, instanceOf(invokeConstructor(AClassFactory.getProductClass(HashMap.class)),
					AClassFactory.getProductClass(List.class)));
			runReturn();
		}
    });
	generate(creator);
}

}</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>

相關文章
相關標籤/搜索