ClassBound:
: FieldTypeSignatureopt
InterfaceBound:
: FieldTypeSignature
SuperclassSignature:
ClassTypeSignature
SuperinterfaceSignature:
ClassTypeSignature
FieldTypeSignature:
ClassTypeSignature
ArrayTypeSignature
TypeVariableSignature
ClassTypeSignature:
L PackageSpecifier* SimpleClassTypeSignature
ClassTypeSignatureSuffix* ;
PackageSpecifier:
Identifier / PackageSpecifier*
SimpleClassTypeSignature:
Identifier TypeArgumentsopt
ClassTypeSignatureSuffix:
. SimpleClassTypeSignature
TypeVariableSignature:
T Identifier ;
TypeArguments:
<TypeArgument+>
TypeArgument:
WildcardIndicatoropt FieldTypeSignature
*
WildcardIndicator:
+
-
ArrayTypeSignature:
[TypeSignature
TypeSignature:
FieldTypeSignature
BaseType
以上定义没有看懂??例子如:
对class MyClass
而对以下类定义:
classMyClass
}
则产生如下签名:
2. 字段签名
语法定义如上,没能看懂。从Tomcat代码中的Digester.class文件中可以解析得到如下的例子:
Ljava/util/HashMap
Ljava/util/Stack
3. 方法签名
语法定义:
MethodTypeSignature:
FormalTypeParametersopt (TypeSignature*) ReturnType
ThrowsSignature*
ReturnType:
TypeSignature
VoidDescriptor
ThrowsSignature:
^ClassTypeSignature
^TypeVariableSignature
也没能看懂。同样从Tomcat代码中的Digester.class文件中可以解析得到如下例子:
(Ljava/lang/String;Ljava/lang/Class<*>;Ljava/lang/String;)V(对应descriptor:“(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;)V”)
(Ljava/lang/String;Ljava/lang/Class<*>;Ljava/lang/String;Z)V(对应descriptor:“(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/String;Z)V”)
()Ljava/util/Map
附录E:annotation结构和element_value结构
1. annotation结构
每一项annotation结构记录一项用户定义的annotation的值。如:
@Test(id = 4, description = "description",useCase = @UseCase())
@UseCase()
voidtestExecute(inta) {
}
编译器会为该方法生成两项annotation。每项annotation指定了annotation的类型和键值对。
| annotation结构 |
|||||||||||||||||
| type |
descriptor |
remark |
|||||||||||||||
| u2 |
type_index |
constant_pool中的索引。CONSTANT_Utf8_info类型。以字段描述符(field descriptor)方式记录当前结构表示的annotation类型。 |
|||||||||||||||
| u2 |
num_element_value_pairs |
记录当前annotation中的键值对数。 |
|||||||||||||||
|
|||||||||||||||||
2. element_value结构
element_value结构记录了所有annotation类型的键值对中的值。它是一个联合类型,可以表示多种类型的值。
| element_value结构 |
||||||||||||||||||||
| type |
descriptor |
remark |
||||||||||||||||||
| u1 |
tag |
tag记录了当前annotation键值对中值的类型,’B’、’C’、’D’、’F’、’I’、’J’、’S’、’Z’表示基本类型(见附录B中的基本类型对应表);其他的合法值有: ’s’ -> String ‘e’ -> enum constant ‘c’ -> class ‘@’ -> annotation type ‘[‘ -> array |
||||||||||||||||||
| ||||||||||||||||||||