Annotation & Paraphrase
chisel中annotation的用法-概述说明以及解释
chisel中annotation的用法-概述说明以及解释1.引言1.1 概述概述:Chisel是一种硬件描述语言,用于设计和验证硬件电路。
在Chisel 中,Annotation是一种注释机制,可以帮助开发者在设计和调试硬件时提供额外的信息和指导。
通过Annotation,开发者可以在Chisel代码中添加额外的信息,如约束条件、优化建议、调试信息等,以提高硬件设计的效率和可维护性。
本文将介绍Chisel中Annotation的作用和用法,帮助读者更好地理解如何利用Annotation来优化和调试硬件设计。
1.2 文章结构本文主要分为引言、正文和结论三个部分。
在引言部分中将对文章的概述、结构和目的进行介绍,为读者提供整体的框架。
在正文部分中将详细介绍Chisel的简介,以及Annotation在Chisel中的作用和用法。
在结论部分中将总结全文的内容,展望Annotation在Chisel中的应用前景,并加上结束语,为整篇文章做一个完美的收尾。
整个文章结构清晰,层次分明,旨在为读者提供全面的信息和深入的理解。
1.3 目的在本文中,我们将讨论Chisel中annotation的用法。
通过深入了解annotation在Chisel中的作用以及具体的用法,读者将能够更好地理解如何在Chisel代码中使用annotation来实现更加灵活和高效的硬件设计。
我们的目的是帮助读者掌握如何利用annotation这一强大工具来优化硬件设计过程,并且能够在实践中灵活运用annotation来提高设计的可维护性和可扩展性。
通过本文的学习,读者将能够更好地利用Chisel语言的特性,为自己的硬件设计项目带来更大的成功和效率提升。
2.正文2.1 Chisel简介Chisel是一个硬件描述语言,它采用Scala语言作为其背后的实现。
Chisel的设计目标是为了简化硬件设计的过程,并提供一种高层抽象的方式来描述硬件结构。
Java中的注解(Annotation)
Java中的注解(Annotation)⽬录结构:contents structure [+]1.2.3.1.2.4.1.2.1.什么是注解⽤⼀个词就可以描述注解,那就是元数据,即⼀种描述数据的数据。
所以,可以说注解就是源代码的元数据。
⽐如,下⾯这段代码:@Overridepublic String toString() {return "This is String Representation of current object.";}上⾯的代码中,我重写了toString()⽅法并使⽤了@Override注解。
但是,即使我不使⽤@Override注解标记代码,程序也能够正常执⾏。
那么,该注解表⽰什么?这么写有什么好处吗?事实上,@Override告诉编译器这个⽅法是⼀个重写⽅法(描述⽅法的元数据),如果⽗类中不存在该⽅法,编译器便会报错,提⽰该⽅法没有重写⽗类中的⽅法。
如果我不⼩⼼拼写错误,例如将toString()写成了toStrring(){double r},⽽且我也没有使⽤@Override注解,那程序依然能编译运⾏。
但运⾏结果会和我期望的⼤不相同。
现在我们了解了什么是注解,并且使⽤注解有助于阅读程序。
Annotation是⼀种应⽤于类、⽅法、参数、变量、构造器及包声明中的特殊修饰符。
它是⼀种由JSR-175标准选择⽤来描述元数据的⼀种⼯具。
2.为什么要使⽤注解使⽤Annotation之前(甚⾄在使⽤之后),XML被⼴泛的应⽤于描述元数据。
不知何时开始⼀些应⽤开发⼈员和架构师发现XML的维护越来越糟糕了。
他们希望使⽤⼀些和代码紧耦合的东西,⽽不是像XML那样和代码是松耦合的(在某些情况下甚⾄是完全分离的)代码描述。
假如你想为应⽤设置很多的常量或参数,这种情况下,XML是⼀个很好的选择,因为它不会同特定的代码相连。
如果你想把某个⽅法声明为服务,那么使⽤Annotation会更好⼀些,因为这种情况下需要注解和⽅法紧密耦合起来,开发⼈员也必须认识到这点。
Annotation入门
同时,annotation运行存在两种方式:运行时、编译时。
上文中讨论的都是在运行时的annotation应用,但在编译时的annotation应用还没有涉及,一、为什么使用Annotation:在JAVA应用中,我们常遇到一些需要使用模版代码。
例如,为了编写一个JAX-RPC web service,我们必须提供一对接口和实现作为模版代码。
如果使用annotation对远程访问的方法代码进行修饰的话,这个模版就能够使用工具自动生成。
另外,一些API需要使用与程序代码同时维护的附属文件。
例如,JavaBeans需要一个BeanInfo Class与一个Bean同时使用/维护,而EJB则同样需要一个部署描述符。
此时在程序中使用anno tation来维护这些附属文件的信息将十分便利而且减少了错误。
二、Annotation工作方式:在5.0 版之前的Java平台已经具有了一些ad hoc annotation 机制。
比如,使用transient修饰符来标识一个成员变量在序列化子系统中应被忽略。
而@deprecated这个javadoc tag也是一个ad h oc annotation用来说明一个方法已过时。
从Java5.0版发布以来,5. 0平台提供了一个正式的annotation功能:允许开发者定义、使用自己的annoatation类型。
此功能由一个定义annotation类型的语法和一个描述annotation声明的语法,读取annotaion 的API,一个使用annotation修饰的class文件,一个annotation处理工具(apt)组成。
annotation并不直接影响代码语义,但是它能够工作的方式被看作类似程序的工具或者类库,它会反过来对正在运行的程序语义有所影响。
annotation可以从源文件、class文件或者以在运行时反射的多种方式被读取。
当然annotation在某种程度上使javadoc tag更加完整。
Annotation注解
一、Annotation究竟是什么?Annotation 提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径。
从某些方面看,annotation就像修饰符一样被使用,并应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中。
这些信息被存储在annotation的“name=value”结构对中。
annotation类型是一种接口,能够通过java反射API的方式提供对其信息的访问。
annotation能被用来为某个程序元素(类、方法、成员变量等)关联任何的信息。
需要注意的是,这里存在着一个基本的潜规则:annotaion不能影响程序代码的执行,无论增加、删除annotation,代码都始终如一的执行。
另外,尽管一些annotation通过java的反射api方法在运行时被访问,而java语言解释器在工作时忽略了这些annotation。
正是由于java虚拟机忽略了annotation,导致了annotation类型在代码中是“不起作用”的;只有通过某种配套的工具才会对annotation类型中的信息进行访问和处理。
本文中将涵盖标准的annotation和meta- annotation类型,陪伴这些annotation类型的工具是java编译器(当然要以某种特殊的方式处理它们)。
由于上述原因,annotation在使用时十分简便。
一个本地变量可以被一个以NonNull命名的annotation类型所标注,来作为对这个本地变量不能被赋予null 值的断言。
而我们可以编写与之配套的一个annotation代码分析工具,使用它来对具有前面变量的代码进行解析,并且尝试验证这个断言。
当然这些代码并不必自己编写。
在JDK安装后,在JDK/bin目录中可以找到名为“apt”的工具,它提供了处理annotation的框架:它启动后扫描源代码中的annotation,并调用我们定义好的annotation处理器完成我们所要完成的工作(比如验证前面例子中的断言)。
Annotation入门教程 第24讲 自定义Annotation
北风网项目实战培训
基于移动支付平台间接口报文解析技术 核心架构实现、及平台交易处理项目全程实录
自定义Annotation
讲师:momo(北风网版权所有)
本节主要内容
@Documented 将此注解包含在 javadoc 中 @Retention 表示在什么级别保存该注解信息。 可选的 RetentionPolicy 参数包括: 1、 RetentionPolicy.SOURCE 注解将被编译器丢弃 2、 RetentionPolicy.CLASS 注解在class文件中可用,但会 被VM丢弃 3、 RetentionPolicy.RUNTIME VM将在运行期也保留注释 ,因此可以通过反射机制读取注解的信息。 @Inherited 允许子类继承父类中的注解
视频配套资料
本次课的课件 课堂演示代码
移动支付平台间接口报文解析核心架构、及平台交 易全程实录 课程学习地址:/goods441.html
欢迎访问我们的官方网站
Annotation注解的使用
使用@SuppressWarning 可以压制多个警告的信息。 在使用序列化接口的时候会有警告信息,可以使用@SuppressWarning进行压制。 以上都是系统中内建的3个Annotation。在开发过程中也会经常使用。
return ""; } }
package cn.demo.test; import ng.annotation.Annotation; import ng.reflect.Method; class Te{ public static void main(String[] args) throws Exception {
1、 @OverRide
表示正确的覆写操作。例如,现在有如下两个类:
eg: public class Person{
public String say(){ return "人在说话";
} } public class Student exstend Person{
public String say(){ return "学生在说话";
自定义Annnotation
如果我们想要自己定义自己的注解类型,那么必须要查看JDK又是如何定义系统内建的Annotation的,如下是JDK API文档中写入的内容。 ng
注释类型 Override
@Target(value=METHOD) @Retention(value=SOURCE)
public @interface MyAnnotation{} 如果现在要使用此Annotation ,如果不在同一个保重,需要导入包,使用@+名称来使用, @MyAnnotation
Java基础之Annotation解读
Java基础之理解Annotation一、概念Annontation是Java5开始引入的新特征。
中文名称一般叫注解。
它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。
更通俗的意思是为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供指定的工具或框架使用的。
Annontation像一种修饰符一样,应用于包、类型、构造方法、方法、成员变量、参数及本地变量的声明语句中。
二、原理Annotation其实是一种接口。
通过Java的反射机制相关的API来访问annotation信息。
相关类(框架或工具中的类)根据这些信息来决定如何使用该程序元素或改变它们的行为。
annotation是不会影响程序代码的执行,无论annotation怎么变化,代码都始终如一地执行。
Java语言解释器在工作时会忽略这些annotation,因此在JVM 中这些annotation是“不起作用”的,只能通过配套的工具才能对这些annontaion类型的信息进行访问和处理。
Annotation与interface的异同:1)、Annotation类型使用关键字@interface而不是interface。
这个关键字声明隐含了一个信息:它是继承了ng.annotation.Annotation接口,并非声明了一个interface2)、Annotation类型、方法定义是独特的、受限制的。
Annotation 类型的方法必须声明为无参数、无异常抛出的。
这些方法定义了annotation的成员:方法名成为了成员名,而方法返回值成为了成员的类型。
而方法返回值类型必须为primitive 类型、Class类型、枚举类型、annotation类型或者由前面类型之一作为元素的一维数组。
方法的后面可以使用default和一个默认数值来声明成员的默认值,null不能作为成员默认值,这与我们在非annotation类型中定义方法有很大不同。
annotation详解
元数据的作用如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类:l 编写文档:通过代码里标识的元数据生成文档。
l 代码分析:通过代码里标识的元数据对代码进行分析。
l 编译检查:通过代码里标识的元数据让编译器能实现基本的编译检查。
基本内置注释@Override注释能实现编译时检查,你可以为你的方法添加该注释,以声明该方法是用于覆盖父类中的方法。
如果该方法不是覆盖父类的方法,将会在编译时报错。
例如我们为某类重写toString()方法却写成了tostring(),并且我们为该方法添加了@Override注释;@Deprecated的作用是对不应该在使用的方法添加注释,当编程人员使用这些方法时,将会在编译时显示提示信息,它与javadoc里的@deprecated标记有相同的功能,准确的说,它还不如javadoc @deprecated,因为它不支持参数,注意:要了解详细信息,请使用-Xlint:deprecation 重新编译。
@SuppressWarnings与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数值都是已经定义好了的,我们选择性的使用就好了,参数如下:deprecation 使用了过时的类或方法时的警告unchecked 执行了未检查的转换时的警告,例如当使用集合时没有用泛型(Generics) 来指定集合保存的类型fallthrough 当Switch 程序块直接通往下一种情况而没有Break 时的警告path 在类路径、源文件路径等中有不存在的路径时的警告serial 当在可序列化的类上缺少serialVersionUID 定义时的警告finally 任何finally 子句不能正常完成时的警告all 关于以上所有情况的警告注意:要了解详细信息,请使用-Xlint:unchecked 重新编译。
定制注释类型好的,让我们创建一个自己的注释类型(annotation type)吧。
Annotation注解
Annotation注解注解Annotation(注解)概述从JDK5.0开始, Java增加了对元数据(MetaData)的支持,也就是Annotation(注解)。
Annotation其实就是代码里的特殊标记,它用于替代配置文件,也就是说,传统方式通过配置文件告诉类如何运行,有了注解技术后,开发人员可以通过注解告诉类如何运行。
在Java 技术里注解的典型应用是:可以通过反射技术去得到类里面的注解,以决定怎么去运行类。
掌握注解技术的要点:如何定义注解。
如何反射注解,并根据反射的注解信息,决定如何去运行类。
了解注解及java提供的几个基本注解@SuppressWarnings:抑制编译器警告。
首先编写一个AnnotationTest类,先通过@SuppressWarnings的应用让大家认识和了解一下注解,通过System.runFinalizersOnExit(true);的编译警告引出@SuppressWarnings("deprecation")。
public class AnnotationTest {@SuppressWarnings("deprecation")public static void main(String[] args) {System.runFinalizersOnExit(true);}}@Deprecated:用于表示某个程序元素(类,方法等)已过时。
接着直接在刚才的类中增加一个方法,并加上@Deprecated标注,在另外一个类中调用这个方法。
public class AnnotationTest {@SuppressWarnings("deprecation")public static void main(String[] args) {System.runFinalizersOnExit(true);}@Deprecatedpublic static void sayHello() {System.out.println("hi,李阿昀");}}@Override:限定重写父类方法,该注解只能用于方法。
Java Annotation 手册
Java Annotation 手册前言:在上篇文章《Java Annotation入门》中概要性的介绍了Annotation的定义、使用,范围涵盖较广,但是深度不够。
所以作者在《Java Annotation入门》后,继续整理了Annotation的概念和知识点,与喜欢research的朋友们共享。
阅读提示:文中提到的程序成员或者程序元素是一个概念,指组成程序代码的单元:如类、方法、成员变量。
一、Annotation究竟是什么?Annotation提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径。
从某些方面看,annotation就像修饰符一样被使用,并应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中。
这些信息被存储在annotation的“name=value”结构对中。
annotation类型是一种接口,能够通过java反射API的方式提供对其信息的访问。
annotation能被用来为某个程序元素(类、方法、成员变量等)关联任何的信息。
需要注意的是,这里存在着一个基本的潜规则:annotaion不能影响程序代码的执行,无论增加、删除annotation,代码都始终如一的执行。
另外,尽管一些annotation通过java的反射api方法在运行时被访问,而java语言解释器在工作时忽略了这些annotation。
正是由于java虚拟机忽略了annotation,导致了 annotation类型在代码中是“不起作用”的;只有通过某种配套的工具才会对annotation类型中的信息进行访问和处理。
本文中将涵盖标准的annotation和meta-annotation类型,陪伴这些annotation类型的工具是java 编译器(当然要以某种特殊的方式处理它们)。
由于上述原因,annotation在使用时十分简便。
一个本地变量可以被一个以NonNull命名的annotation类型所标注,来作为对这个本地变量不能被赋予null值的断言。
java 第十一讲 Annotation
枚举
其他注释类型 或以上类型的一维数组
23
Process and Portfolio Management
© 2005 IBM Corporation
Thank You!
Q&A Time
24
Process and Portfolio Management
© 2005 IBM Corporation
SuppressWarningsTest.java
9 Process and Portfolio Management © 2005 IBM Corporation
自定义Annotation类型
定义Marker Annotation,也就是Annotation名称本身 即提供信息 对于程序分析工具来说,主要是检查是否有 MarkerAnnotation的出现,并作出对应的动作
Java SE
Copyright© 2008 - 2009 WitBridge
第十一讲
元数据
2
Process and Portfolio Management
© 2005 IBM Corporation
概要
Annotation的意义
内建Annotation Annotation的定义方式 Annotation的使用 Annotation高级特性
Annotation并不直接影响代码语义,但是它能够工 作的方式被看作类似程序的工具或者类库,它会反过 来对正在运行的程序语义有所影响。annotation可以 从源文件、class文件或者以在运行时反射的多种方式 被读取。
5
Process and Portfolio Management
chisel中annotation的用法
chisel中annotation的用法全文共四篇示例,供读者参考第一篇示例:在Java编程语言中,注解(annotation)是一种给程序中元素(类、方法、变量等)加上注释的方法,它提供了一种在代码中嵌入元数据的方式。
Chisel是一种硬件描述语言,也支持注解的功能。
使用注解可以帮助程序员更好地理解代码,同时也可以提供给编译器和其他工具一些额外的信息。
Chisel中的注解使用和Java中的注解类似,可以在元素的前面使用“@”符号来标识。
在Chisel中,注解可以用来描述硬件模块的特性、功能、接口等信息,提高代码的可读性和可维护性。
下面将介绍一些常用的Chisel注解及其用法。
1. @chiselName@chiselName注解用于标识一个Chisel模块的名称。
在Chisel 中,每个硬件模块都需要有一个唯一的名称,通过@chiselName注解可以指定模块的名称。
例如:```scala@chiselNameclass MyModule extends Module {}```}```除了上面介绍的这些常用的Chisel注解外,Chisel还支持自定义注解,程序员可以根据自己的需要定义和使用注解。
注解是Chisel语言中一个非常有用的特性,可以帮助程序员更好地理解和管理硬件描述代码。
希望本文对Chisel中注解的用法有所帮助。
第二篇示例:在Java编程语言中,注解是一种可用于在程序中插入元数据的特殊标记。
Chisel是一种硬件描述语言,具有和Verilog类似的结构,用于描述硬件电路。
在Chisel中,注解可以被用来为设计人员提供额外的信息,在创建硬件描述时起到一定作用。
Chisel中的注解语法和Java中的注解语法相似,都是以"@"符号开头,后接注解的名称。
注解可以用在类、方法、字段等各种地方,特定的注解还可以接受参数。
在Chisel中,注解可以用来表示层次结构、接口定义、处理器流水线等各种概念。
java_Annotation学习笔记
5、定义Annotation形态时也可以使用包来管理类别,方式同于类的导入功能。
6、高级特性:
告知编译程序如何处理@Retention(保持力):
ng.annotation.Retention形态可以在您定义Annotation形态时,
}
}
}
7、Target和ElementType
设置注解的位置或者范围:
@Target(ElementType.TYPE)
public @interface MyTarget {
String value();
}
@MyTarget(value="aaaa")
MyTest myTest = new MyTest();
Class<MyTest> c = MyTest.class;
Method method = c.getMethod("output", new Class[]{});
method.invoke(myTest, null);
使用ng.annotation.Documenpublic @interface MyDocumented {
String hello();
}
@MyDocumented(hello="hello")
public class MyDocumentedTest {
public class AannotationEnumUsage {
public void method(){
System.out.println("annotation of usage");
r语言annotation函数
r语言annotation函数R语言是一种用于数据分析和统计学习的编程语言,而annotation函数则是R语言中用于添加注释的一个函数。
在本篇文章中,我们将深入了解annotation函数的用法及其基本原理。
一、annotation函数的基本定义在开始讨论annotation函数之前,我们需要先了解一下annotation的概念。
annotation与注释是一样的,即在数据图表上添加文字或图形等来说明数据特征或数据分析中的某些重要信息。
我们可以通过调整annotation的位置、大小、颜色、字体等属性来实现注释的需求。
在R语言中,annotation函数是用于添加注释的一个函数,通过该函数可以实现将文字、图形、箭头等图形元素添加到数据图表上的功能。
annotation函数包括了三个子函数:textGrob、rectGrob和arrowGrob,分别用于添加文字、矩形框和箭头等图形元素。
二、annotation函数的基本用法1、添加文字注释使用annotation函数添加文字注释时,我们需要先通过textGrob函数创建一个文本图形对象,然后利用该对象的属性设置文本的字体、颜色、大小、对齐方式、文本值等信息,最后通过annotation_custom 函数将文本对象添加到数据图表的指定位置即可完成注释的添加。
例如,我们可以使用以下代码添加一条直线并在其上方添加“y=0.5”注释:plot(1:10, sin(1:10))abline(h = 0.5)text <- textGrob("y=0.5", gp = gpar(fontsize = 12, fontface = "bold", col = "blue"), x = 5, y = 0.6, hjust = 0.5) annotation_custom(text, xmin = 4.5, xmax = 5.5, ymin = 0.6, ymax = 0.7)上述代码通过textGrob函数创建了一个文本对象,使用gpar函数设置了文本的属性,通过x、y、hjust等参数设置了文本在图表中的位置和对齐方式,然后通过annotation_custom函数将该文本对象添加到图表中。
annotation 获得element方法
annotation 获得element方法Annotation 获得 element 方法介绍Annotation 是 Java 语言提供的一种元数据机制,可以在编译期间通过注解来生成或修改源代码。
在某些场景下,我们可能需要获取某个注解所标注的元素信息,这就需要用到 Annotation 的获得element 方法。
本文将详细介绍各种获得 element 方法的使用。
基本概念在使用 Annotation 获得 element 方法之前,先来了解一些基本概念:•Annotation:注解,其本质是一种特殊的接口,用 @interface 关键字定义。
•元素(element):注解中的属性,类似于接口中的方法,可以带有默认值。
方法一:使用反射通过反射可以获得类、方法、字段等的信息,可以通过反射获得注解的元素信息。
以下是使用反射的步骤:1.获取 Class 对象,可以是类、方法、字段等。
2.使用getAnnotation(Class<? extends Annotation>annotationClass)方法获取注解对象。
3.调用注解对象的方法获取元素信息。
Class<?> clazz = ;Annotation annotation = ();if (annotation != null) {String value = ((MyAnnotation) annotation).value();// 使用获取到的元素信息进行操作}方法二:使用编译时注解处理器通过自定义编译时注解处理器,可以在编译期间处理注解,并生成或修改源代码。
可以通过编译时注解处理器获取注解的元素信息。
以下是使用编译时注解处理器的步骤:1.实现AbstractProcessor类创建注解处理器。
2.复写process(Set<? extends TypeElement> annotations,RoundEnvironment roundEnv)方法,获取注解元素信息。
访问注解(annotation)的几种常见方法
package com.cj.Annotation;
import ng.annotation.Documented; import ng.annotation.ElementType; import ng.annotation.Inherited; import ng.annotation.Retention; import ng.annotation.RetentionPolicy; import ng.annotation.Target;
} catch (Throwable ex) { ex.printStackTrace();
} } } } catch (SecurityException | ClassNotFoundException e) { e.printStackTrace(); } }
3. @Inherited——指明该注解类型被自动继承。如果用户在当前类中查询这个元注解类型并且当前类的声明中不包含这个元注解类型,那么 也将自动查询当前类的父类是否存在Inherited元注解,这个动作将被重复执行知道这个标注类型被找到,或者是查询到顶层的父类。
4.@Retention——指明了该Annotation被保留的时间长短。RetentionPolicy取值为SOURCE,CLASS,RUNTIME。
3. @SuppressWarnings——这个仅仅是告诉编译器忽略特定的警告信息,例如在泛型中使用原生数据类型。它的保留策略是SOURCE(译 者注:在源文件中有效)并且被编译器丢弃。
Annotation注解
Annotation注解概念注解和注释的区别是注解是官⽅的解释,注释是⾃⼰写的解释。
主要根据annotation的⽣命周期,⽤于源代码的注释说明、告诉编译器检查某些条件、影响javadoc⼯具⽣成的⾏为、影响jvm程序的运⾏。
annotation的⽣命周期分为只在源代码存在、class⽂件中存在、jvm运⾏期存在三种。
只在源代码中存在的不会影响class的运⾏只有运⾏期存在的才会影响程序的运⾏java默认提供的⼏个注解:@Deprecated、@SuppressWarnings、@Overridejdk1.5开始⽀持,jdk1.6开始可⾃定义,可加在类、接⼝、⽅法、成员变量的定义前⾯。
Annotation本⾝是⼀个接⼝实现这个接⼝的类才能成为注解使⽤,不过实现的⽅式不是直接implements语法,⽽是使⽤@interface的语法。
使⽤@interface定义的类默认实现了Annotation接⼝。
使⽤定义⽅法:定义接⼝的interface前⾯加@符号即可,如:然后就可以使⽤了,如:带参数:注解中定义⽅法,使⽤时参数名就是⽅法名。
如果只有⼀个且⽅法名是”value”,则使⽤时可以不指定参数名,默认是value,如:也可以使⽤default指定默认值,如:ps:参数类型只能是基本数据类型、String、Enum、Annotation、Class、以上类型的数组类型,不能是Integer、Object等类型。
元注解⽤于修饰注解的注解,有@Target、@Retention、@Documented、@Inheritedjdk⾃带提供的注解:@Deprecated 意思是“废弃的,过时的”@Override 意思是“重写、覆盖”@SuppressWarnings 意思是“压缩警告”,如@SuppressWarnings("unused")、@SuppressWarnings("rawtypes")等。
Annotation之二:@Inherited注解继承情况
Annotation之⼆:@Inherited注解继承情况@Inherited annotation类型是被标注过的class的⼦类所继承。
类并不从它所实现的接⼝继承annotation,⽅法并不从它所重载的⽅法继承annotation。
⼦类中能否继承注解如下:(类和接⼝情况)上⾯的结果同样适⽤⼦类的⼦类。
⽰例1:⾃定义注解标记在类上的继承情况1、⾃定义注解package com.dxz.annotation.demo;import ng.annotation.Inherited;import ng.annotation.Retention;@Inherited // 可以被继承@Retention(ng.annotation.RetentionPolicy.RUNTIME) // 可以通过反射读取注解public @interface BatchExec {String value();}2、被注解的⽗类package com.dxz.annotation.demo;@BatchExec(value = "类名上的注解")public abstract class ParentClass {@BatchExec(value = "⽗类的abstractMethod⽅法")public abstract void abstractMethod();@BatchExec(value = "⽗类的doExtends⽅法")public void doExtends() {System.out.println(" ParentClass doExtends ...");}@BatchExec(value = "⽗类的doHandle⽅法")public void doHandle() {System.out.println(" ParentClass doHandle ...");}//@BatchExec(value = "⽗类的doHandle⽅法")public void doHandle2() {System.out.println(" ParentClass doHandle ...");}}⼦类:package com.dxz.annotation.demo;public class SubClass1 extends ParentClass {// ⼦类实现⽗类的抽象⽅法@Overridepublic void abstractMethod() {System.out.println("⼦类实现⽗类的abstractMethod抽象⽅法");}//⼦类继承⽗类的doExtends⽅法// ⼦类覆盖⽗类的doHandle⽅法@Overridepublic void doHandle() {System.out.println("⼦类覆盖⽗类的doHandle⽅法");}}测试类:package com.dxz.annotation.demo;import ng.reflect.Method;public class MainTest1 {public static void main(String[] args) throws SecurityException, NoSuchMethodException {Class<SubClass1> clazz = SubClass1.class;if (clazz.isAnnotationPresent(BatchExec.class)) {BatchExec cla = clazz.getAnnotation(BatchExec.class);System.out.println("类:⼦类可继承,注解读取='" + cla.value() + "'");} else {System.out.println("类:⼦类不能继承到⽗类类上Annotation");}// 实现抽象⽅法测试Method method = clazz.getMethod("abstractMethod", new Class[] {});if (method.isAnnotationPresent(BatchExec.class)) {BatchExec ma = method.getAnnotation(BatchExec.class);System.out.println("⼦类实现抽象⽅法:⼦类可继承,注解读取='" + ma.value() + "'");} else {System.out.println("⼦类实现抽象⽅法:没有继承到⽗类抽象⽅法中的Annotation");}// ⼦类未重写的⽅法Method methodOverride = clazz.getMethod("doExtends", new Class[] {});if (methodOverride.isAnnotationPresent(BatchExec.class)) {BatchExec ma = methodOverride.getAnnotation(BatchExec.class);System.out.println("⼦类未实现⽅法:⼦类可继承,注解读取='" + ma.value() + "'");} else {System.out.println("⼦类未实现⽅法:没有继承到⽗类doExtends⽅法中的Annotation");}// ⼦类重写的⽅法Method method3 = clazz.getMethod("doHandle", new Class[] {});if (method3.isAnnotationPresent(BatchExec.class)) {BatchExec ma = method3.getAnnotation(BatchExec.class);System.out.println("⼦类覆盖⽗类的⽅法:继承到⽗类doHandle⽅法中的Annotation,其信息如下:" + ma.value()); } else {System.out.println("⼦类覆盖⽗类的⽅法:没有继承到⽗类doHandle⽅法中的Annotation");}// ⼦类重写的⽅法Method method4 = clazz.getMethod("doHandle2", new Class[] {});if (method4.isAnnotationPresent(BatchExec.class)) {BatchExec ma = method4.getAnnotation(BatchExec.class);System.out.println("⼦类未实现⽅法doHandle2:⼦类可继承,注解读取='" + ma.value());} else {System.out.println("⼦类未实现⽅法doHandle2:没有继承到⽗类doHandle2⽅法中的Annotation");}}}结果:类:⼦类可继承,注解读取='类名上的注解'--场景2⼦类实现抽象⽅法:没有继承到⽗类抽象⽅法中的Annotation--场景4⼦类未实现⽅法:⼦类可继承,注解读取='⽗类的doExtends⽅法'--场景6⼦类覆盖⽗类的⽅法:没有继承到⽗类doHandle⽅法中的Annotation--场景8⼦类未实现⽅法doHandle2:没有继承到⽗类doHandle2⽅法中的Annotation--场景5⽰例2:⾃定义注解标记在接⼝上的继承情况package com.dxz.annotation.demo3;@BatchExec(value = "接⼝上的注解")public interface Parent {void abstractMethod();}接⼝的继承类package com.dxz.annotation.demo3;import com.dxz.annotation.BatchExec;///@BatchExec(value = "类名上的注解")public abstract class ParentClass3 {public void abstractMethod() {System.out.println("ParentClass3");}@BatchExec(value = "⽗类中新增的doExtends⽅法")public void doExtends() {System.out.println(" ParentClass doExtends ...");}}该继承类的注解可见测试:package com.dxz.annotation.demo3;import ng.reflect.Method;import com.dxz.annotation.BatchExec;public class MainTest3 {public static void main(String[] args) throws SecurityException, NoSuchMethodException { Class<ParentClass3> clazz = ParentClass3.class;if (clazz.isAnnotationPresent(BatchExec.class)) {BatchExec cla = clazz.getAnnotation(BatchExec.class);System.out.println("类:⼦类可继承,注解读取='" + cla.value()+"'");} else {System.out.println("类:⼦类不能继承到接⼝类上Annotation");}// 实现抽象⽅法测试Method method = clazz.getMethod("abstractMethod", new Class[] {});if (method.isAnnotationPresent(BatchExec.class)) {BatchExec ma = method.getAnnotation(BatchExec.class);System.out.println("⼦类实现抽象⽅法:⼦类可继承,注解读取='" + ma.value()+"'"); } else {System.out.println("⼦类实现抽象⽅法:没有继承到接⼝抽象⽅法中的Annotation"); }//⼦类中新增⽅法Method methodOverride = clazz.getMethod("doExtends", new Class[] {});if (methodOverride.isAnnotationPresent(BatchExec.class)) {BatchExec ma = methodOverride.getAnnotation(BatchExec.class);System.out.println("⼦类中新增⽅法:注解读取='" + ma.value()+"'");} else {System.out.println("⼦类中新增⽅法:不能读取注解");}}}结果:类:⼦类不能继承到接⼝类上Annotation--场景12⼦类实现抽象⽅法:没有继承到接⼝抽象⽅法中的Annotation--场景14⼦类中新增⽅法:注解读取='⽗类中新增的doExtends⽅法'--场景16⼦类的⼦类注解继承情况:package com.dxz.annotation.demo3;public class SubClass3 extends ParentClass3 {// ⼦类实现⽗类的抽象⽅法@Overridepublic void abstractMethod() {System.out.println("⼦类实现⽗类的abstractMethod抽象⽅法");}// ⼦类覆盖⽗类的doExtends⽅法}测试类:package com.dxz.annotation.demo3;import ng.reflect.Method;import com.dxz.annotation.BatchExec;public class MainTest33 {public static void main(String[] args) throws SecurityException, NoSuchMethodException { Class<SubClass3> clazz = SubClass3.class;if (clazz.isAnnotationPresent(BatchExec.class)) {BatchExec cla = clazz.getAnnotation(BatchExec.class);System.out.println("类:⼦类可继承,注解读取='" + cla.value()+"'");} else {System.out.println("类:⼦类不能继承到⽗类类上Annotation");}// 实现抽象⽅法测试Method method = clazz.getMethod("abstractMethod", new Class[] {});if (method.isAnnotationPresent(BatchExec.class)) {BatchExec ma = method.getAnnotation(BatchExec.class);System.out.println("⼦类实现抽象⽅法:⼦类可继承,注解读取='" + ma.value()+"'"); } else {System.out.println("⼦类实现抽象⽅法:没有继承到⽗类抽象⽅法中的Annotation");}//⼦类未重写的⽅法Method methodOverride = clazz.getMethod("doExtends", new Class[] {});if (methodOverride.isAnnotationPresent(BatchExec.class)) {BatchExec ma = methodOverride.getAnnotation(BatchExec.class);System.out.println("⼦类未实现⽅法:⼦类可继承,注解读取='" + ma.value()+"'");} else {System.out.println("⼦类未实现⽅法:没有继承到⽗类doExtends⽅法中的Annotation"); }}}结果:类:⼦类不能继承到⽗类类上Annotation⼦类实现抽象⽅法:没有继承到⽗类抽象⽅法中的Annotation--场景14⼦类未实现⽅法:⼦类可继承,注解读取='⽗类中新增的doExtends⽅法'--场景18附注-----------------------------------------------------------------Spring 实现事务的注解@Transactional 是可以被继承的,通过查看它的源码可以看到@Inherited。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• Annotation • Paraphrase 加注法 释义法
Annotation 加注法
General introduction
• Annotation is used in translation of some cultural terms which have no equivalent expression in another language. • 由于英汉文化存在许多差异,因此英语中某 些文化词语在汉语中根本就没有对等词,形 成了词义上的空缺。在这种情况下,英译汉 时常常要采用加注法来弥补空缺。 • 加注通常可以用来补充诸如背景材料、词语 起源等相关信息,便于读者理解。
• The American Dream 美国梦(即美国式的民主与自由:不依赖 世袭的物质条件和社会地位,白手起家的 个人奋斗精神)
• The Fifth Avenue 第五大道(指纽约曼哈顿区第34街到第59 街这一片区域。街上到处都是百货商店以 及各种商铺,也是万圣节游行的必经之地。 现已成为高贵与富有的象征。)
• PS: Tom, Dick, Harry都是英美常见的人名, 这里泛指任何人,相当于汉语中的“张三、 李四、王五”。所以这里不宜直译为“汤 姆、迪克、哈里”。
tips
• 释义法用来翻译某些不可直译的表达,或是 处理那些虽可以直译成汉语但是表达效果欠 佳的句子。
• The question she flunked on was: "What is the Constitution of the United States *?" The answer she gave was: "A boat." 她答错的一道题是:"美国宪法*是什么? 她的回答却是"一条船。" (*the Constitution of the United States 指美国宪法,但它也是美国历史上著名战 舰“宪法号ansliteration + annotation) • 指音译后附加解释性注释。注释可长可短, 可采用文中注释,也可采用脚注,还可二者 合用。
• Jazz 爵士音乐 • Clone 克隆(一种无性繁殖方法) • Bingo 宾果游戏(一种填写格子的游戏, 在游戏中第一个成功者以喊“Bingo”表示 取胜而得名) • El Nino 厄尔尼诺(现象)(指严重影响 全球气候的太平洋热带海域的大风及海水的 大规模移动)
Paraphrase
释义法
Paraphrase (释义法)
• 释义(paraphrase)是指舍弃原文的具体形 象,采用解释性的方法译出原文的意思。 • 在翻译一些具有鲜明民族色彩的词语,例 如成语、典故等,如果直译不能使译文读 者明白,并且原文重意不重形时,而加注 又太哆嗦,可以采用释义法将原文意义很 好地传达。
• He did it a Jordan. 他投篮象飞人乔丹一 样棒。
In sentence
• New York was never Mecca to me. 纽约从不是我心中的 圣地麦加。
• I’m Peter Darwin. Everyone asks, so I may as well say at once that no, I’m not related to Charles. • 我叫彼得•达尔文。谁都会对我的名字产生 怀疑,我不妨当下说个明白:我与进化论 创始人查尔斯没有关系。
• togetherness 和睦相处,亲密无间;不分彼此的集体感 • swan song 绝唱,辞世之作、归天之作 • a throwaway society 一个大手大脚、浪费成风的社会
• The young girl thumbed her way to the passing cars. 那个年轻的姑娘站在路边不停地向来往的 汽车摆动着竖起的拇指表示她要搭车。 • PS: thumb one’s way为英语手势语,意 为“站在路边向来往的汽车摆动着竖起的 拇指表示要搭车”,但是在汉语中没有这 种手势语。
• 2) 直译加注(literal translation + annotation) • 指直译原文,并附加解释性注释。注释可长 可短,既可采用文中注释,也可采用脚注, 还可二者合用。
• Big Apple 大苹果(纽约的别称) • sesame street 芝麻街 (指美国儿童电视连续节目,每天一小时, 主要为动画片、游戏、木偶戏等) • fly girl 【俚】飞飞女 (时髦撩人的年轻女子, 尤指美国黑人少女) • tabloid (猎取并报道名人轶事等以迎合低级趣味的) 市井小报、市井电视节目
Other examples
• She and her mother are as like as two peas. • 她和她母亲长得一模一样。
• PS: as like as two peas 不能译为“像两颗 豌豆一样相似”。
• It is not easy to become a member of that club—they want people who have plenty of money to spend, not just every Tom, Dick, and Harry. • 要参加那个俱乐部并非易事—他们只吸收 手头阔绰的人,而不是普通百姓。
• Like a son of Bachus, he can drink up two bottles of whisky at a breath. 他简直像酒神巴赫斯的儿子,能一口气喝 光两瓶威士忌。 (巴赫斯是古希腊神话中的酒神。)
• Let George do it. 让乔治*去做吧。 ( *法国国王路易十二是个不爱动脑筋的人, 一旦遇到重要事情,他就推托给大臣乔治。 他总说:“让乔治去做吧,他是个能干的 人。”后喻让别人去干,让他人去伤神。)
• Bill’s new girlfriend is certainly a knockout. 比尔新结识的女朋友确实很迷人。 • PS:这是来自拳击比赛的术语。在拳击比赛 中,假如一名拳手把另一名拳手打倒下, 躺在擂台上,在一段指定时间内都无力起 身继续比赛的话,则拳证会判后者被“击 倒”,这就是knockout,后引申为表示极 具魅力、使对方晕头转向的人,多指女 性。)
In sentence
• But I am short-tempered, frazzled from all responsibilities. I am the “sandwich generation” *, caught between kids and parents. 但是我的脾气不好,都是这些事给烦的。 我是个夹在孩子和父母之间的“三明治 人”。 (* “三明治人”指的是要照顾孩 子和父母的人)
Other examples
• The man who waters his grass after a good rain is carrying coals to Newcastle. 刚下一场及时雨,那人却又为草坪浇水, 真是把煤运到纽卡斯尔* ,多此一举。 (*纽卡斯尔:英国煤都。)
• It was Friday*and soon they'd go out and get drunk. 星期五发薪日到了,他们马上就要上街去喝 得酩酊大醉。 (*星期五[Friday]为英国的发薪日。)