1.优点

  可以代替枚举,静态常量,可以让注解只在代码中存在,编译后就删除,可以省内存。

2.@IntDef

2.1 官网

  https://developer.android.com/reference/kotlin/androidx/annotation/IntDef.html

2.2 java示例

     //1.指定注解的保留策略,RetentionPolicy.SOURCE表示只保留源码中,编译时删除。还有CLASS和RUNTIME
@Retention(RetentionPolicy.SOURCE) //2.定义int 值 ,
//写法1: flag true表示可以用 MODE_STANDARD|MODE_LIST 或者 MODE_LIST & MODE_TABS 这种方式使用,然并卵 ,默认false
@IntDef(flag = true,value = {MODE_STANDARD, MODE_LIST, MODE_TABS})
//写法2:
//@IntDef({MODE_STANDARD, MODE_LIST, MODE_TABS}) //3.定义注解类型
public @interface MODE {
int MODE_STANDARD = ; //默认是 public static final
int MODE_LIST = ;
int MODE_TABS = ;
} //4.使用注解 示例
@MODE int getMode() { return MODE_STANDARD; }
void setMode(@MODE int m) { mode = m; }
int mode;
void testMode(){
int m1 = MODE_LIST;
int m2 = getMode();
setMode(m1);
m2 = getMode(); m2 = m1 | MODE_LIST & MODE_TABS ; }

2.3 kotlin示例

     //1.指定注解的保留策略,AnnotationRetention.SOURCE表示只保留源码中,编译时删除。还有CLASS和RUNTIME
@Retention(AnnotationRetention.SOURCE)
//2.定义int 值 ,
@IntDef(flag = true, value = [MODE_STANDARD, MODE_LIST, MODE_TABS])
//3.定义注解类型
annotation class MODE {
companion object {
const val MODE_STANDARD =
const val MODE_LIST =
const val MODE_TABS =
}
}
//4.使用注解 示例
fun resetMode(@MODE m: Int) {
mode = m
}
var mode: Int = fun testMode() {
val m1 = MODE_LIST resetMode(m1) var m2 = m1 or (MODE_LIST and MODE_TABS) }

3.@StringDef

3.1 官网

https://developer.android.com/reference/androidx/annotation/StringDef.html?hl=en

3.2 java示例

     //1.指定注解的保留策略,RetentionPolicy.SOURCE表示只保留源码中,
@Retention(RetentionPolicy.SOURCE) //2.定义string值 ,它必需在 注解类型 前。
@StringDef({CMD_A8, CMD_E5, CMD_H3}) //3.定义注解类型,
public @interface CMD {
public static final String CMD_A8 = "A8";
public static final String CMD_E5 = "E5";
public static final String CMD_H3 = "H3";
}
//4.使用
void sendData(@CMD String cmd,String data){
//... connect socket ,
// socket.send
}
//5.测试
void testStringDef(){
//sendData("cmd","data");//error ,"cmd"不是 定义的那几个值中的一个。
sendData(CMD_A8,"hello");
}

3.3 kotlin示例

     //1.指定注解的保留策略,AnnotationRetention.SOURCE表示只保留源码中,
@Retention(AnnotationRetention.SOURCE)
//2.定义string值 ,它必需在 注解类型 前。
@StringDef(A8,E5,H9)
//3.定义注解类型,
annotation class CMD {
companion object {
const val A8 = "A8"
const val E5 = "E5"
const val H9 = "H9"
}
} //4.使用
fun sendData(@CMD cmd: String, data: String) {
//... connect socket ,
// socket.send
} //5.测试
fun testStringDef() {
sendData("cmd","data");//error ,"cmd"不是 定义的那几个值中的一个。
sendData(A8, "hello")
}

常用注解@Intdef与@Stringdef的更多相关文章

  1. Spring系列之Spring常用注解总结

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...

  2. SpringMVC常用注解實例詳解3:@ResponseBody

    我的開發環境框架:        springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...

  3. SpringMVC常用注解實例詳解2:@ModelAttribute

    我的開發環境框架:        springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...

  4. Spring常用注解汇总

    本文汇总了Spring的常用注解,以方便大家查询和使用,具体如下: 使用注解之前要开启自动扫描功能 其中base-package为需要扫描的包(含子包). <context:component- ...

  5. Spring常用注解,自动扫描装配Bean

    1 引入context命名空间(在Spring的配置文件中),配置文件如下: xmlns:context="http://www.springframework.org/schema/con ...

  6. springmvc常用注解与类型转换

    springmvc常用注解与类型转换 一:前置 spring -servlet.xml 注入 <!-- 启用spring mvc 注解 --> <context:annotation ...

  7. SpringMVC常用注解,返回方式,路径匹配形式,验证

    常用注解元素 @Controller 标注在Bean的类定义处 @RequestMapping 真正让Bean具备 Spring MVC Controller 功能的是 @RequestMapping ...

  8. SpringMVC 常用注解

    本文参考了博客,具体请见:http://www.cnblogs.com/leskang/p/5445698.html Spring MVC的常用注解 1.@Controller @Controller ...

  9. spring注解开发中常用注解以及简单配置

    一.spring注解开发中常用注解以及简单配置 1.为什么要用注解开发:spring的核心是Ioc容器和Aop,对于传统的Ioc编程来说我们需要在spring的配置文件中邪大量的bean来向sprin ...

随机推荐

  1. 当asp.net core偶遇docker一(模型验证和Rabbitmq 三)

    继续上一篇 上一篇,从core方式实现了一个Rabbitmq发送队列消息的接口,我们现在需要在模型验证里面加入验证失败就发送消息的部分 [AttributeUsage(AttributeTargets ...

  2. 在不同网段使用 VLAN 通信 - SVI,单臂路由

    在 VLAN 这篇文章中知道,设置 VLAN 目的是隔离大型的广播域,将其分成很小的广播域,从而更好的管理.但也就带来了一些问题:如流量不能在不同的 VLAN 间通信. 而为了解决这个问题,可以采用如 ...

  3. hibernate自动创建表报错,提示不存在

    报错:ERROR: HHH000299: Could not complete schema update  或 不能执行statement等 解决方式: 根据mysql版本更改hibernate.c ...

  4. 改改Python代码,运行速度还能提升6万倍

    这份最新研究指出,在后摩尔定律时代,人类所获得的的算力提升将更大程度上来源于计算堆栈的「顶层」,即软件.算法和硬件架构,这将成为一个新的历史趋势. 很多人学习python,不知道从何学起.很多人学习p ...

  5. Ternary weight networks

    Introduction 这两天看了一下这篇文章,我就这里分享一下,不过我还是只记录一下跟别人blog上没有,或者自己的想法(ps: 因为有时候翻blog时候发现每篇都一样还是挺烦的= =) .为了不 ...

  6. 12、Decorator 装饰器 模式 装饰起来美美哒 结构型设计模式

    1.Decorator模式 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰器模式(Decorator Pattern)允许向一个现 ...

  7. EasyExcel的基本使用方法

    在Java语言领域,说到Excel处理工具,大家首先想到的可能是阿帕奇的poi,poi在处理数据量不大的excel文件上确实非常强大,但是随着后来excel从03(一个excel文件中最多有65536 ...

  8. C++ 对象的初始化

    目录 默认初始化 默认构造函数(default constructor) 构造函数初始值列表(cosntructor initializer list) 直接初始化和拷贝初始化 拷贝构造函数(copy ...

  9. 二、JAVA 的了解与安装

    1.java了解 1.1.java三大版本 javaSE:标准版(桌面程序,控制台开发...) javaME:嵌入式开发(手机.小家电...)[可以忽略] javaEE:企业版开发(web端,服务器开 ...

  10. 一个简单的RPC框架实现

    package com.rpc; public interface EchoService { String echo(String ping); } package com.rpc; public ...