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的树节点如下:

浙公网安备 33010602011771号