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

 

 

 

 

 

 

 

 

 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-08-21 18:05  牧之丨  阅读(2762)  评论(1编辑  收藏  举报