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()); } }</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>这段代码的两个方法的返回类型分别是String和void,对应的ASMSupport的代码如下:</p> <p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:74055c8b-f8a1-4671-a4d4-5f47171f957e" class="wlWriterEditableSmartContent"><pre class="brush: java; gutter: true; first-line: 1; tab-size: 4; toolbar: true; width: 964px; height: 471px;" style=" width: 964px; height: 471px;overflow: auto;">public static void main(String\[\] args) { ClassCreator creator = new ClassCreator(Opcodes.V1\_5, Opcodes.ACC\_PUBLIC , "generated.operators.ReturnOperatorGenerateExample", null, null);1/* 2 * 有返回类型的方法 3 */ 4creator.createStaticMethod("commonMethod", null, null, AClass.STRING_ACLASS, null, Opcodes.ACC_PUBLIC, new StaticMethodBody(){ 5 @Override 6 public void generateBody(LocalVariable... argus) { 7 runReturn(Value.value("I'm from commonMethod")); 8 } 9}); 10 11/* 12 * 无返回类型的方法 13 */ 14creator.createStaticMethod("main", new AClass[]{AClassFactory.getProductClass(String[].class)}, new String[]{"args"}, null, null, 15 Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, new StaticMethodBody(){ 16 @Override 17 public void generateBody(LocalVariable... argus) { 18 invoke(systemOut, "println", invokeStatic(getMethodOwner(), "commonMethod")); 19 runReturn(); 20 } 21}); 22generate(creator);
}</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
</p> <p>这里我们主要关注的是runReturn(Value.value("I'm from commonMethod"))和runReturn(),前者是非void的,参数就是我们方法需要返回的值,后者就是直接return,没有返回值。</p>