19.Java 注解
19.Java注解
1.Java内置注解----注解代码
@Deprecated //不推荐使用的过时方法
@Deprecated
public void badMethod(){
System.out.println("I am a old function");
}
@Override //必须是覆盖父类(接口)的函数
@Override
public String toString(){
return "override toString()";
}
@SuppressWarnings //关闭不恰当的编译期间警告
2.自定义注解
a.没有任何元素的注解---标记注解
b.普通注解定义、普通注解的使用
/**
* 是否是类
*/
public @interface IsClass {
String value();
boolean isClass() default true;
}
解释:该注解有两个元素value和isClass,isClass元素的目的是标记对象是否为类,该元素默认为真。
当注解的元素都有默认值的时候,名为value的元素赋值时不用写名称
3.元注解
- @Target---------------用于描述注解的使用范围
- eg:TYPE:用于描述类、接口(包括注解类型) 或enum声明
- @Retention-----------用于描述注解的生命周期
- SOURCE:在源文件中有效(即源文件保留)---编译时起作用
- RUNTIME:在运行时有效(即运行时保留)----运行时起作用
- CLASS:在class文件中有效(即class保留)[默认]
- @Documented————被修饰的注解会被写到javadoc中(标记注解)
- @Inherited------允许子类继承父类中的注解[注解自身时不可继承的]可以使用getAnnotations()反射获取父类被
@Target(ElementType.TYPE)
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface IsClass {
String value();
boolean isClass() default true;
}
说明:元注解是用来修饰注解的注解,限定了注解的注释范围,注解的生命周期【源码级,运行时级别,Class文件级】,是否可以继承,是否创建文档等
4.运行时注解
像Spring一类的注解都与运行时注解有很大的关系,下面是一个利用注解,获取二维表的表名称,表的行名称,表的列值三个属性
4.1定义运行时注解
- Table是二维表的表格名称
- Column是二维表的列
- Key是二维表的行
import java.lang.annotation.*; /**
* Created by yangyun on 2016/12/27.
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Column {
String value();
} @Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface Key{
String value();
} @Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface Table {
String value();//表格的名称
}
4.2使用注解并编写相关的注解信息获取类
- Tables类中包含了我们所需要的信息,Table注解注解在Table类上,Key和Column注解在Field上
- GetInformation类是获取相关的注解信息的操作类,利用的是Java的反射机制
import java.util.List; /**
* Created by yangyun on 2016/12/27.
*/
@Empty(field = "Not Empty")
@IsClass("value属性的值")
public class Annotation {
public static void main(String[] args) {
System.out.format("tableName:%s\n",GetInformation.getName(Tables.class));
try {
System.out.format("key:%s\n",GetInformation.getKey(Tables.class));
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
System.out.format("columns:%s\n",GetInformation.getCols(Tables.class));
}
} @Table("students")
class GetInformation{
public static String getName(Class<Tables> tablesClass){
String strTableName=null;
if(tablesClass.isAnnotationPresent(Table.class)){
Table tableName=tablesClass.getAnnotation(Table.class);//表格名称
strTableName=tableName.value();
}
return strTableName;
} public static String getKey(Class<Tables> tablesClass) throws NoSuchFieldException {
Field field=tablesClass.getDeclaredField("key");//获取private属性
String strKey=null;
if(field!=null){
Key key=field.getAnnotation(Key.class);
if(key!=null){
strKey=key.value();
}
}
return strKey;
} public static List<String> getCols(Class<Tables> tablesClass){
List<String> columns=new ArrayList<String>();
Field[] fields=tablesClass.getDeclaredFields();
if(fields!=null) {
for (Field field : fields) {
if (field.isAnnotationPresent(Column.class)) {
columns.add(field.getAnnotation(Column.class).value());
}
}
}
return columns;
}
} @Table("Students")
class Tables{
@Key("Id")
private String key; @Column("name")
private String col1; @Column("sex")
private String col2;
}
4.3 主要的API介绍(不细说属于反射的知识)
- 1.myClass.getAnnotations()---获取该类所有的注解
- 2.myClass.getAnnotation(Class annotationType)—获取特定注解类型
- 3.myClass.isAnnotationPresent(Class annotationType)—判断是否存在特定类型的注解
- 4.myClass.getDeclareAnnotations()— 获取该类的所有注解不包括从父类中继承的注解
参考文献
https://blog.zenfery.cc/archives/70.html
https://blog.zenfery.cc/archives/71.html
https://blog.zenfery.cc/archives/78.html
19.Java 注解的更多相关文章
- Java注解教程:自定义注解示例,利用反射进行解析
Java注解能够提供代码的相关信息,同时对于所注解的代码结构又没有直接影响.在这篇教程中,我们将学习Java注解,如何编写自定义注解,注解的使用,以及如何使用反射解析注解. 注解是Java 1.5引入 ...
- Java注解教程及自定义注解
Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...
- Java注解开发与应用案例
Java注解开发与应用案例 Annotation(注解)是JDK5.0及以后版本引入的,可以对包.类.属性.方法的描述,给被述对象打上标签,被打上标签后的类.属性.方法将被赋予特殊的“功能”:打个比喻 ...
- 秒懂,Java 注解 (Annotation)你可以这样学 - CSDN博客
https://blog.csdn.net/briblue/article/details/73824058 文章开头先引入一处图片. 这处图片引自老罗的博客.为了避免不必要的麻烦,首先声明我个人比较 ...
- Java 注解概要
转载自:https://www.cnblogs.com/peida/archive/2013/04/24/3036689.html(Java注解就跟C#的特性是一样的) 要深入学习注解,我们就必须能定 ...
- Java 注解指导手册 – 终极向导
原文链接 原文作者:Dani Buiza 译者:Toien Liu 校对:深海 编者的话:注解是java的一个主要特性且每个java开发者都应该知道如何使用它. 我们已经在Java Code Gee ...
- Java注解处理器
Java注解处理器 2015/03/03 | 分类: 基础技术 | 0 条评论 | 标签: 注解 分享到:1 译文出处: race604.com 原文出处:Hannes Dorfmann Java ...
- 基于java注解实现自己的orm框架
ORM即Object Relation Mapping,Object就是对象,Relation就是关系数据库,Mapping映射,就是说Java中的对象和关系数据库中的表存在一种对应关系. 现在常见的 ...
- 夯实Java基础系列15:Java注解简介和最佳实践
Java注解简介 注解如同标签 Java 注解概述 什么是注解? 注解的用处 注解的原理 元注解 JDK里的注解 注解处理器实战 不同类型的注解 类注解 方法注解 参数注解 变量注解 Java注解相关 ...
随机推荐
- 手动安装Oracle的Maven依赖
由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 环境:win7 + Orac ...
- leetcode笔记
82. Remove Duplicates from Sorted List II https://leetcode.com/problems/remove-duplicates-from-sorte ...
- vtkBoxWidget2Example
This example uses a vtkBoxWidget2 to manipulate an actor. The widget only contains the interaction l ...
- sql 脚本编写之路 常用语句(一)
1.用一个表中的某一列更新另外一个表的某些列: for ACCESS 数据库: update a, b set a.name=b.name1 where a.id=b.id for SQL Serve ...
- FFT NNT
算算劳资已经多久没学新算法了,又要重新开始学辣.直接扔板子,跑...话说FFT算法导论里讲的真不错,去看下就懂了. //FFT#include <cstdio> #include < ...
- 分分钟教你从根本上认识Struts2框架
在了解Struts2之前我们先来聊聊Struts1,我们都知道在很长的一段时间内,所有的MVC框架中,Struts1他是处于一个超级大咖的地位,无论是从市场角度和使用的用户的数量这个角度而言,Stru ...
- 增量式PID推导及C语言实现
PID控制器表达式为: \[ u(t) = K_pe(t) + K_i\int_0^t e(\tau)d\tau + K_d\frac{de(t)}{dt} \] 离散化: 令 $ t = nT,~T ...
- 安卓ApiDemos最简单的使用方法
http://download.csdn.net/detail/ffwmxr/7401067#comment 正确使用方法:开新工程, 名字API Demos,将下载文件里的 src,res, And ...
- SwipeMenuListView在ScrollView里上下滑动导致菜单不能显示完全的bug解决方法
这是因为上下滑动的时候,事件被ScrollView截获了,这时候应该禁止ScrollView截获上下滑动事件,解决方法如下 public class NoRollSwipeMenuListView e ...
- Sicily 1151: 简单的马周游问题(DFS)
这道题嘛,直接使用DFS搜索,然后莫名其妙地AC了.后来看了题解,说是move的顺序不同的话可能会导致超时,这时便需要剪枝,真是有趣.原来自己是误打误撞AC了,hhh.题解还有另一种解法是先把一条完整 ...