annotation
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于annotation内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在annotation相关知识领域提供全面立体的资料补充。同时还包含 android、a href、abap 的知识内容,欢迎查阅!
annotation相关知识
-
Java进阶(一)Annotation(注解)原创文章,转载请务必将下面这段话置于文章开头处(保留超链接)。本文转发自技术世界,原文链接 http://www.jasongj.com/2016/01/17/Java1_注解Annotation概念Annotation是Java5开始引入的特性。它提供了一种安全的类似于注释和Java doc的机制。实事上,Annotation已经被广泛用于各种Java框架,如Spring,Jersey,JUnit,TestNG。注解相当于是一种嵌入在程序中的元数据,可以使用注解解析工具或编译器对其进行解析,也可以指定注解在编译期或运行期有效。这些元数据与程序业务逻辑无关,并且是供指定的工具或框架使用的。Meta Annotation元注解的作用就是负责注解其他注解。Java5定义了4个标准的Meta Annotation类型,它们被用来提供对其它 Annotation类型作说明。@Target@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚
-
Java Annotation 必须掌握的特性原文链接什么是Annotation?Annotation翻译为中文即为注解,意思就是提供除了程序本身逻辑外的额外的数据信息。Annotation对于标注的代码没有直接的影响,它不可以直接与标注的代码产生交互,但其他组件可以使用这些信息。Annotation信息可以被编译进class文件,也可以保留在Java 虚拟机中,从而在运行时可以获取。甚至对于Annotation本身也可以加Annotation。那些对象可以加Annotation类,方法,变量,参数,包都可以加Annotation。内置的Annotation@Override 重载父类中方法 @Deprecated 被标注的方法或类型已不再推荐使用@SuppressWarnings 阻止编译时的警告信息。其需要接收一个String的数组作为参数。 可供使用的参数有:uncheckedpathserialfinallyfallthrough可以用与其他annotation上的annotation@Retention确定Annotation被保存的生命周期
-
Annotation 注解笔记简介 1)开发人员可以在不改变原有逻辑的情况下,在源文件嵌入一些补充信息。可以用来修饰类、属性、方法,并且不影响程序的运行,无论是否使用Annotation代码都可以正常执行。 2)接口 import java.lang.annotation.Annotation 系统内建的Annotation 1)@Override:主要的实在覆写的时候使用,用于保证覆写方法的正确性。 2)@Deparecated:主要功能是用来申明一个建议使用的方法。如果在程序中使用了该方法,则在编译的时候出现警告信息。 3)@SuppressWarning主要功能是用来压制警告。
-
深入理解Java:注解(Annotation)--注解处理器[转载]深入理解Java:注解(Annotation)--注解处理器 如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建于使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。 注解处理器类库(java.lang.reflect.AnnotatedElement): Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Annotation类型的父接口。除此之外,Java在java.lang.reflect 包下新增了AnnotatedElement接口,该
annotation相关课程
annotation相关教程
- 3. 注解的声明 在 Kotlin 中的声明注解的方式和 Java 稍微不一样,在 Java 中主要是通过 @interface关键字来声明,而在Kotlin 中只需要通过 annotation class 来声明, 需要注意的是在 Kotlin 中编译器禁止为注解类指定类主体,因为在 Kotlin 中注解只是用来定义关联的声明和表达式的元数据的结构。Kotlin 注解声明package com.mikyou.annotation//和一般的声明很类似,只是在class前面加上了annotation修饰符annotation class TestAnnotation(val value: String)Java 注解声明package com.mikyou.annotation;//java中的注解通过@interface关键字进行定义,它和接口声明类似,只不过在前面多加@public @interface TestAnnotation { String value();}
- 4.2 通过反射读取注解 我们先来学习一下通过反射读取注解内容相关的 API。通过反射,判断某个注解是否存在于Class、Field、Method或Constructor:Class.isAnnotationPresent(Class)Field.isAnnotationPresent(Class)Method.isAnnotationPresent(Class)Constructor.isAnnotationPresent(Class)isAnnotationPresent()方法的返回值是布尔类型,例如,判断Student类中的nickname字段上,是否存在@Length注解:boolean isLengthPresent = Student.class.getDeclaredField("nickname").isAnnotationPresent(Length.class);通过反射,获取 Annotation 对象:使用反射 API 读取Annotation:Class.getAnnotation(Class)Field.getAnnotation(Class)Method.getAnnotation(Class)Constructor.getAnnotation(Class)例如,获取nickname字段标注的@Length注解:Length annotation = Student.class.getDeclaredField("nickname").getAnnotation(Length.class);通过反射读取注解的完整实例如下:public class Student { // 标注注解 @Length(min = 2, max = 5, message = "昵称的长度必须在2~6之间") private String nickname; public Student(String nickname) { this.setNickname(nickname); } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public static void main(String[] args) throws NoSuchFieldException { boolean isLengthPresent = Student.class.getDeclaredField("nickname").isAnnotationPresent(Length.class); if (isLengthPresent) { Length annotation = Student.class.getDeclaredField("nickname").getAnnotation(Length.class); // 获取注解的参数值 int min = annotation.min(); int max = annotation.max(); String message = annotation.message(); // 打印参数值 System.out.println("min=" + min); System.out.println("max=" + max); System.out.println("message=" + message); } else { System.out.println("没有在nickname字段上找到@Length注解"); } }}运行结果:min=2 max=5 message=昵称的长度必须在2~6之间运行过程如下:
- 5.4 @Repeatable元注解 介绍这个注解决定标注的注解在一个注解在一个代码元素上可以应用两次或两次以上。源码定义@Target(AnnotationTarget.ANNOTATION_CLASS)//目标对象只能是注解类public annotation class Repeatable
- 5.3 @MustBeDocumented元注解 介绍该注解比较简单主要是为了标注一个注解类作为公共API的一部分,并且可以保证该注解在生成的API文档中存在。源码定义@Target(AnnotationTarget.ANNOTATION_CLASS)//目标对象只能是注解类public annotation class MustBeDocumented
- 8. @JvmSuppressWildcards和@JvmWildcard @JvmSuppressWildcards 和 @JvmWildcard 的作用用于指示编译器生成或省略类型参数的通配符,JvmSuppressWildcards用于参数的泛型是否生成或省略通配符,而JvmWildcard用于返回值的类型是否生成或省略通配符源码定义//作用于类、函数、属性、类型@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.TYPE)@MustBeDocumented@OptionalExpectation//指定suppress为true表示不生成,false为生成通配符,默认是true不生成public expect annotation class JvmSuppressWildcards(val suppress: Boolean = true)@Target(AnnotationTarget.TYPE)@Retention(AnnotationRetention.BINARY)@MustBeDocumentedpublic actual annotation class JvmWildcard注解使用interface ICovert { fun covertData(datas: List<@JvmSuppressWildcards(suppress = false) String>)//@JvmSuppressWildcardsd用于参数类型 fun getData(): List<@JvmWildcard String>//@JvmWildcard用于返回值类型}class CovertImpl implements ICovert { @Override public void covertData(List<? extends String> datas) {//参数类型生成通配符 } @Override public List<? extends String> getData() {//返回值类型生成通配符 return null; }}
- 4. 注解的应用 在上一步我们知道了如何声明和定义标签了,那么接下来就是用这个标签,如何把我们定义好的标签贴到指定的代码上。在 Kotlin 中使用注解和 Java 一样。要应用一个注解都是 @注解类名。@Target(AnnotationTarget.FUNCTION)@Retention(value = AnnotationRetention.RUNTIME)annotation class TestAnnotation(val value: Int)//和一般的声明很类似,只是在class前面加上了annotation修饰符class Test { @TestAnnotation(value = 1000) fun test() {//给test函数贴上TestAnnotation标签(添加TestAnnotation注解) //... }}在很多常见的 Java 或 Kotlin 框架中大量使用了注解,比如我们最常见的 JUnit 单元测试框架:class ExampleUnitTest { @Test //@Test注解就是为了告诉JUnit框架,这是一个测试方法,当做测试调用。 fun addition_isCorrect() { assertEquals(4, 2 + 2) }}在 Kotlin 中注解类中还可以拥有注解类作为参数,不妨来看下 Kotlin 中对 @Deprecated这个注解源码定义,以及它的使用。@Deprecated 注解在原来的 Java 基础增强了一个 ReplaceWith 功能.。可以直接在使用了老的 API 时,编译器可以根据 ReplaceWith 中的新 API,自动替换成新的 API。这一点在 Java 中是做不到的,你只能点击进入这个 API 查看源码来正确使用新的 API。//@Deprecated注解比Java多了ReplaceWith功能, 这样当你在调用remove方法,编译器会报错。使用代码提示会自动IntelliJ IDEA不仅会提示使用哪个函数提示替代它,而且会快速自动修正。@Deprecated("Use removeAt(index) instead.", ReplaceWith("removeAt(index)"), level = DeprecationLevel.ERROR)//定义的级别是ERROR级别的,这样当你在调用remove方法,编译器会报错。@kotlin.internal.InlineOnlypublic inline fun <T> MutableList<T>.remove(index: Int): T = removeAt(index)@Deprecated 注解的 remove 函数使用://Deprecated注解的使用fun main(args: Array<String>) { val list = mutableListOf("a", "b", "c", "d", "e") list.remove(3)//这里会报错, 通过remove函数注解定义,这个remove函数在定义的level是ERROR级别的,所以编译器直接抛错}最后来看下 @Deprecated 注解的定义:@Target(CLASS, FUNCTION, PROPERTY, ANNOTATION_CLASS, CONSTRUCTOR, PROPERTY_SETTER, PROPERTY_GETTER, TYPEALIAS)@MustBeDocumentedpublic annotation class Deprecated( val message: String, val replaceWith: ReplaceWith = ReplaceWith(""),//注解类中构造器可以使用注解类作为函数参数 val level: DeprecationLevel = DeprecationLevel.WARNING)@Target()@Retention(BINARY)@MustBeDocumentedpublic annotation class ReplaceWith(val expression: String, vararg val imports: String)注意:注解类中只能拥有如下类型的参数: 基本数据类型、字符串、枚举、类引用类型、其他的注解类(例如Deprecated注解类中的ReplaceWith注解类)
annotation相关搜索
-
ajax
android
a href
abap
abap开发
abort
absolutelayout
abstractmethoderror
abstracttablemodel
accept
access
access教程
accordion
accumulate
acess
action
actionform
actionlistener
activity
addeventlistener