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