常用注解@Intdef与@Stringdef
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的更多相关文章
- Spring系列之Spring常用注解总结
传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...
- SpringMVC常用注解實例詳解3:@ResponseBody
我的開發環境框架: springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...
- SpringMVC常用注解實例詳解2:@ModelAttribute
我的開發環境框架: springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...
- Spring常用注解汇总
本文汇总了Spring的常用注解,以方便大家查询和使用,具体如下: 使用注解之前要开启自动扫描功能 其中base-package为需要扫描的包(含子包). <context:component- ...
- Spring常用注解,自动扫描装配Bean
1 引入context命名空间(在Spring的配置文件中),配置文件如下: xmlns:context="http://www.springframework.org/schema/con ...
- springmvc常用注解与类型转换
springmvc常用注解与类型转换 一:前置 spring -servlet.xml 注入 <!-- 启用spring mvc 注解 --> <context:annotation ...
- SpringMVC常用注解,返回方式,路径匹配形式,验证
常用注解元素 @Controller 标注在Bean的类定义处 @RequestMapping 真正让Bean具备 Spring MVC Controller 功能的是 @RequestMapping ...
- SpringMVC 常用注解
本文参考了博客,具体请见:http://www.cnblogs.com/leskang/p/5445698.html Spring MVC的常用注解 1.@Controller @Controller ...
- spring注解开发中常用注解以及简单配置
一.spring注解开发中常用注解以及简单配置 1.为什么要用注解开发:spring的核心是Ioc容器和Aop,对于传统的Ioc编程来说我们需要在spring的配置文件中邪大量的bean来向sprin ...
随机推荐
- Python多线程-ThreadLocal
参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017630786314240#0 ThreadLocal ThreadLocal变量虽然是 ...
- 自定制格式化方式format
自定制格式化方式format # x='{0}{0}{0}'.format('dog') # # print(x) # class Date: # def __init__(self,year,mon ...
- 有关vue中v-if和v-show的区别
其实这两个都是属于根据条件判断元素是否可见,但是还有有区别的哦! v-show:就是无论什么时候它其实都一直存在页面上也就是会渲染在DOM上,只是你写了条件让它可见或不可见而已,因为它本质是把它的cs ...
- MySQL8.0.20安装配置+用Navicat连接详细教程(win10,Navicat15)
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用 ...
- 「MoreThanJava」Day 5:面向对象进阶——继承详解
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
- AI顶会
自己如何学习CV paper with code(每周) 基石方向 1.image classification 这个肯定要关注,这个往往都是backbone https://paperswithco ...
- vue实现自定义表格列
在我们开发PC端的项目使用表单时,尤其是crm系统,应该经常会遇到这样的需求, 用户需要根据设置来自定义显示列. 查了element的官方文档, 并没有此类组件, 所以手动封装了一个简单的组件, 希望 ...
- 一篇夯实一个知识点系列--python实现十大排序算法
写在前面 排序是查找是算法中最重要的两个概念,我们大多数情况下都在进行查找和排序.科学家们穷尽努力,想使得排序和查找能够更加快速.本篇文章用Python实现十大排序算法. 干货儿 排序算法从不同维度可 ...
- Git本地库既关联GitHub又关联Gitee
创建代码仓库 使用gitee举例(github和gitee差不多) 1.在gitee右上角点击+,选择新建仓库
- Vue 引入指定目录文件夹所有的组件 require.context
require.context require.context是webpack中用来管理依赖的一个函数,此方法会生成一个上下文模块,包含目录下所有的模块的引用,同构正则表达式匹配,然后require进 ...