注解是一个汉语词汇,读音为zhù jiě,意思是用文字来解释字句;泛指解释;解释字句的文字;神鬼名。民间传说指阴司第一阎王殿中职掌解送鬼魂并令其注册者。
基本信息
词目:注解
近义词:注明 注脚 注释 表明 解说 解释 讲明 评释
反义词:正文
引文
《后汉书·儒林传上·杨伦》:“ 扶风 杜林 传《古文尚书》、 林 同郡 贾逵 为之作训, 马融 作传, 郑玄 注解,由是《古文尚书》遂显於世。”
宋 欧阳修 《序》:“其难晓之言,略为注解。”
清 平步青 《霞外攟屑·论文上·杜牧之》:“今之言者,必曰使圣人微旨不传,乃 郑玄 辈为注解之罪,仆观其所解释,明白完具。”
《儿女英雄传》第三八回:“好端端的话,被这位太太一下注解,他姊妹听着益发不好意思。”
艾芜 《人生哲学的一课》三:“﹝我﹞就只是知道这一点子,然而这一点也尽够一个沦落人的注解了。”
三国 吴 陆绩 《述玄》:“后数年专精读之,半岁间粗觉其意,於是草创注解,未能也。”
宋 赵与时 《宾退录》卷一:“ 灵素 被旨修道书,改正诸家醮仪,校讎《丹经·灵篇》,删修注解。”
清 俞樾 《茶香室续钞·李善注有数本》:“其绝笔之本,兼释音训义,注解甚多。”
胡适 《新诂·序例》:“全篇共分九节,现在逐节分写。本文逐字隔开,注解用五号字,注之注用六号字。”
明 李贽 《答邓石阳书》:“昨者复书‘真空’十六字,已说得无渗漏矣,今复为注解以请正,何如?”
《镜花缘》第九三回:“不是《博雅》、《方言》的别名,就是《山海经》、《拾遗记》的冷名,先要注解,岂能雅俗共赏。”
元 无名氏 《端正好》套曲:“初学笃志真心爱,广看些经书注解,忽然间心地悟豁然开。”
明 吕柟 《朱四子抄释》卷一:“读书须是将本文熟读,且咀嚼有味,若有理会不得处,然后将注解看,方是有益。”
清 朱之瑜 《答桐山知几书》:“故不肖於古文子史中注解时有批抹者,此惟可与知者道耳,与庸人言,无不抵掌而笑。”
清 李斗 《扬州画舫录·新城北录中》:“一为 关帝 、二十四功曹、二十四注解、北极、五祖、天师出迹。”
JAVA中的注解
java.lang.annotation.Retention可以在您定义Annotation型态时,指示编译器如何对待您的自定义 Annotation,预设上编译器会将Annotation资讯留在class档案中,但不被虚拟机器读取,而仅用于编译器或工具程式运行时提供资讯。
在使用Retention型态时,需要提供java.lang.annotation.RetentionPolicy的列举型态:
package java.lang.annotation;
public enum RetentionPolicy {
SOURCE, //编译器处理完Annotation资讯后就没事了
CLASS, //编译器将Annotation储存于class档中,预设
RUNTIME //编译器将Annotation储存于class档中,可由VM读入
}
RetentionPolicy为SOURCE的例子是SuppressWarnings,这个资讯的作用仅在告知编译器抑制警讯,所以不必将这个资讯储存于class档案。
RetentionPolicy为RUNTIME的时机,可像是您使用Java设计一个程式码分析工具,您要VM读出Annotation资讯,以在分析程式中使用,搭配Reflection机制,就可以达到这个目的。
在J2SE 5.0中新增了java.lang.reflect.AnnotatedElement这个界面,当中定义有四个方法:
public Annotation getAnnotation(Class annotationType);
public Annotation[] getAnnotations();
public Annotation[] getDeclaredAnnotations();
public boolean isAnnotationPresent(Class annotationType);
Class、Constructor、Field、Method、Package等类别,都实作了AnnotatedElement这个介面,所以您可以从这些类别的实例上,分别取得标示于其上的Annotation与其资讯,如果RetentionPolicy为RUNTIME的话。
举个例子来说,假设您设计了以下的Debug Annotation:
* Debug.java
package onlyfun.caterpillar;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface Debug {
String value();
String name();
}
由于RetentionPolicy为RUNTIME,编译器在处理Debug Annotation时,会将之编译至class档中,并可以VM读出Annotation资讯,接着我们将Debug用于程式中:
* SomeObject.java
package onlyfun.caterpillar;
public class SomeObject {
@Debug(
value = "unit",
name = "debug1"
)
public void doSomething() {
// ....
}
}
可以设计一个工具程式来读取Annotation资讯:
* DebugTool.java
package onlyfun.caterpillar;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
public class DebugTool {
public static void main(String[] args)
throws NoSuchMethodException {
Class
Method method = c.getMethod("doSomething");
if(method.isAnnotationPresent(Debug.class)) {
System.out.println("@Debug is found.");
Debug debug = method.getAnnotation(Debug.class);
System.out.println("\tvalue = " + debug.value());
System.out.println("\tname = " + ());
}
else {
System.out.println("@Debug is not found.");
}
Annotation[] annotations = method.getAnnotations();
for(Annotation annotation : annotations) {
System.out.println(
annotation.annotationType().getName());
}
}
}
程式的执行结果如下:
@Debug is found.
value = unit
name = debug1
onlyfun.caterpillar.Debug
投稿