Java中的语法树结构
1、JCTypeParameter
1
|
class B<T extends CA&IA&IB> { ...} |
截图如下:
接口继承了StatementTree接口,而实现类实现了JCStatement类,不过有一个例外,如:
CaseTree 实现了JCStatement,但接口JCCase是继承了Tree。
1、JCContinue
语法树结构举例如下:
1
2
3
4
|
stop: while ( get ()) { a = 3; continue stop; } |
截图如下:
2、JCEnhancedForLoop
语法树结构举例如下:
1
2
3
4
|
String[] strArray = null ; for (String a:strArray){ System.out.println(a); } |
截图如下:
3、JCSwitch
语法树结构如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
static enum E { A, B } public static void main(String args[]) { E e = E.B; switch (e) { case A: System. out .println( "A" ); break ; case B: System. out .println( "B" ); default : System. out .println(0); } } |
如下截图:
关于JCSwitch再举一个例子,如下:
1
2
3
4
5
6
7
8
9
10
11
|
switch (c) { case 1: int aaa = 1; int bbb = 2; case 2: aaa = 2; default : { } bbb = 4; } |
语法树截取后图如下所示.
接口实现了ExpressionTree,而实现类实现了JCExpression,如下:
1、LetExpression
语法树结构如下:
1
2
|
Integer foo = 0; foo++; |
截图如下:
2、JCAnnotation
语法树结构如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package com.test11; public class Test1 { @MzTargetPackage(isCanNull = true , num=100, version = "1.1.0" , fruitColor=MzTargetPackage.Color.BULE, value={ "a," , "b" , "c" }, compoundTest=@Code(author = "closedevice" ,date= "20161225" ) ) private void process() { } } |
如下截图:
3、JCNewArray
语法树结构如下:
1
2
3
4
5
|
private void process() { int [] a = new int [2]; int [] b = new int []{}; int [] c = {1,2,3}; } |
如下截图:
JCNewClass的语法树结构如下:
1
2
3
4
5
6
7
|
class Outer<T>{ class Inner<D>{ public <X> Inner(String a,Integer ...ems){ } } } |
1
2
3
4
5
|
new Outer<String>(). new <Number>Inner<Integer>( "arg" ,1,2,3){ public void m1(){ } }; |
实例类与类声明时的两个值不太一样。
下面来看JCNewClass的语法结构,如下截图。
4、JCMethodInvocation
语法结构举个例子,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Father { public <T> void m1( int a) { } } public class Test3 extends Father { class C { public void m() { Test3. super .<String>m1( 1 ); } } } |
查看调用方法m1()的语法结构如下:
接口实现了ParameterizedTypeTree,而实现类实现了JCExpression,如下:
1
2
3
4
5
6
7
8
|
/** * A parameterized type, T<...> */ public static class JCTypeApply extends JCExpression implements ParameterizedTypeTree { public JCExpression clazz; public List<JCExpression> arguments; // ... } |
5、JCTypeApply
语法结构举个例子,如下:
1
2
3
4
5
|
class X<T1 extends InputStream,T2>{ public void test(){ X<FileInputStream,?> x = null ; } } |
如果截图展示了语法树结构:
6、JCWildcard
7、JCInstanceOf
举个例子,如下:
1
2
|
Object o = null ; if (o instanceof A){} |
截图如下:
8、JCPrimitiveTypeTree
当为 Object o = int.class.toString();
9、JCUnary
如++a的树节点如下: