1// create truth table for || (conditional OR) operator 2System.out.printf("%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", 3 "Conditional OR (||)", "false || false", (false || false), 4 "false || true", (false || true), "true || false", 5 (true || false), "true || true", (true || true)); 6 7// create truth table for & (boolean logical AND) operator 8System.out.printf("%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", 9 "Boolean logical AND (&)", "false & false", (false & false), 10 "false & true", (false & true), "true & false", (true & false), 11 "true & true", (true & true)); 12 13// create truth table for | (boolean logical inclusive OR) operator 14System.out.printf("%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", 15 "Boolean logical inclusive OR (|)", "false | false", 16 (false | false), "false | true", (false | true), 17 "true | false", (true | false), "true | true", (true | true)); 18 19// create truth table for ^ (boolean logical exclusive OR) operator 20System.out.printf("%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", 21 "Boolean logical exclusive OR (^)", "false ^ false", 22 (false ^ false), "false ^ true", (false ^ true), 23 "true ^ false", (true ^ false), "true ^ true", (true ^ true)); 24 25// create truth table for ! (logical negation) operator 26System.out.printf("%s\n%s: %b\n%s: %b\n", "Logical NOT (!)", "!false", 27 (!false), "!true", (!true));
}</pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>我们接下来使用ASMSupport如何生成上面的代码:</p> <div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:b9a8e603-65ce-4ad8-ba7e-9bddb231310a" 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: 319px;" style=" width: 665px; height: 319px;overflow: auto;">package example.operators;import org.objectweb.asm.Opcodes;
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 example.AbstractExample;
public class LogicalOperatorGenerate extends AbstractExample {
1public static void main(String[] args) { 2 //willGenerate(args); 3 ClassCreator creator = new ClassCreator(Opcodes.V1_5, 4 Opcodes.ACC_PUBLIC, 5 "generated.operators.LogicalOperatorGenerateExample", null, 6 null); 7 8 9 creator.createStaticMethod("main", new AClass[] { AClassFactory.getProductClass(String[].class) }, new String[] { "args" }, null, null, Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, new StaticMethodBody() { 10 11 @Override 12 public void generateBody(LocalVariable... argus) { 13 /*System.out.printf("%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", 14 "Conditional AND (&&)", "false && false", (false && false), 15 "false && true", (false && true), "true && false", 16 (true && false), "true && true", (true && true));*/ 17 invoke(systemOut, "printf", 18 Value.value("%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n"), 19 Value.value("Conditional AND (&&)"), 20 Value.value("false && false"), 21 conditionalAnd(Value.value(false), Value.value(false)), 22 Value.value("false && true"), 23 conditionalAnd(Value.value(false), Value.value(true)), 24 Value.value("true && false"), 25 conditionalAnd(Value.value(true), Value.value(false)), 26 Value.value("true && true"), 27 conditionalAnd(Value.value(true), Value.value(true)) 28 ); 29 30 /*System.out.printf("%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", 31 "Conditional OR (||)", "false || false", (false || false), 32 "false || true", (false || true), "true || false", 33 (true || false), "true || true", (true || true));*/ 34 invoke(systemOut, "printf", 35 Value.value("%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n"), 36 Value.value("Conditional OR (||)"), 37 Value.value("false || false"), conditionalOr(Value.value(false), Value.value(false)), 38 Value.value("false || true"), conditionalOr(Value.value(false), Value.value(true)), 39 Value.value("true || false"), conditionalOr(Value.value(true), Value.value(false)), 40 Value.value("true || true"), conditionalOr(Value.value(true), Value.value(true)) 41 ); 42 43 /*System.out.printf("%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", 44 "Boolean logical AND (&)", "false & false", (false & false), 45 "false & true", (false & true), "true & false", (true & false), 46 "true & true", (true & true));*/ 47 invoke(systemOut, "printf", 48 Value.value("%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n"), 49 Value.value("Boolean logical AND (&)"), 50 Value.value("false & false"), logicalAnd(Value.value(false), Value.value(false)), 51 Value.value("false & true"), logicalAnd(Value.value(false), Value.value(true)), 52 Value.value("true & false"), logicalAnd(Value.value(true), Value.value(false)), 53 Value.value("true & true"), logicalAnd(Value.value(true), Value.value(true)) 54 ); 55 56 /*System.out.printf("%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", 57 "Boolean logical inclusive OR (|)", "false | false", 58 (false | false), "false | true", (false | true), 59 "true | false", (true | false), "true | true", (true | true));*/ 60 invoke(systemOut, "printf", 61 Value.value("%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n"), 62 Value.value("Boolean logical inclusive OR (|)"), 63 Value.value("false | false"), logicalOr(Value.value(false), Value.value(false)), 64 Value.value("false | true"), logicalOr(Value.value(false), Value.value(true)), 65 Value.value("true | false"), logicalOr(Value.value(true), Value.value(false)), 66 Value.value("true | true"), logicalOr(Value.value(true), Value.value(true)) 67 ); 68 69 /*System.out.printf("%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n", 70 "Boolean logical exclusive OR (^)", "false ^ false", 71 (false ^ false), "false ^ true", (false ^ true), 72 "true ^ false", (true ^ false), "true ^ true", (true ^ true));*/ 73 invoke(systemOut, "printf", 74 Value.value("%s\n%s: %b\n%s: %b\n%s: %b\n%s: %b\n\n"), 75 Value.value("Boolean logical exclusive OR (^)"), 76 Value.value("false ^ false"), logicalXor(Value.value(false), Value.value(false)), 77 Value.value("false ^ true"), logicalXor(Value.value(false), Value.value(true)), 78 Value.value("true ^ false"), logicalXor(Value.value(true), Value.value(false)), 79 Value.value("true ^ true"), logicalXor(Value.value(true), Value.value(true)) 80 ); 81 82 /*System.out.printf("%s\n%s: %b\n%s: %b\n", "Logical NOT (!)", "!false", 83 (!false), "!true", (!true));*/ 84 invoke(systemOut, "printf", 85 Value.value("%s\n%s: %b\n%s: %b\n"), 86 Value.value("Logical NOT (!)"), 87 Value.value("!false"), not(Value.value(false)), 88 Value.value("!true"), not(Value.value(true)) 89 ); 90 91 runReturn(); 92 } 93 }); 94 generate(creator); 95}
} </pre><!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com --></div>
<p>我们在每段ASMSupport的代码上分别用注释说明了这段代码生成的内容是什么,我们就不对其进行详细的解说,在这只说明下这些逻辑运算符所对应的asmsupport方法,这些方法都是存在与jw.asmsupport.block.ProgramBlock类中:</p> <ul> <li><font color="#f79646"><strong>public ShortCircuitAnd conditionalAnd(Parameterized factor1, Parameterized factor2) :</strong></font> 条件与(&&)操作 </li> <li><font color="#f79646"><strong>public ShortCircuitOr conditionalOr(Parameterized factor1, Parameterized factor2) :</strong></font> 条件或(||)操作 </li> <li><font color="#f79646"><strong>public LogicalAnd logicalAnd(Parameterized factor1, Parameterized factor2) :</strong></font> 逻辑与(&)操作 </li> <li><strong><font color="#f79646">public LogicalOr logicalOr(Parameterized factor1, Parameterized factor2) :</font></strong> 逻辑或(|)操作 </li> <li><font color="#f79646"><strong>public LogicalXor logicalXor(Parameterized factor1, Parameterized factor2) :</strong></font> 逻辑异或(^)操作 </li> <li><strong><font color="#f79646">public Not not(Parameterized factor) :</font></strong> 非(!)操作 </li> </ul> <p> </p> <p>以上除了not方法都有两个参数,分别表示运算符前后的两个参数。比如a&&b,那么factor1表示a,factor2表示b, 至于not方法,其效果就是!factor的效果。</p> <p><a href="http://www.wensiqun.com/download/118/">更多实例下载</a></p>