?
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"
},
????????????
[email?protected](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,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的树节点如下: