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的樹節點如下: