常用注解@Intdef与@Stringdef

1.优点

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

2.@IntDef

2.1 官网

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

2.2 java示例

复制代码
 1     //1.指定注解的保留策略,RetentionPolicy.SOURCE表示只保留源码中,编译时删除。还有CLASS和RUNTIME
 2     @Retention(RetentionPolicy.SOURCE)
 3 
 4     //2.定义int 值 ,
 5     //写法1: flag true表示可以用 MODE_STANDARD|MODE_LIST 或者 MODE_LIST & MODE_TABS 这种方式使用,然并卵 ,默认false
 6     @IntDef(flag = true,value = {MODE_STANDARD, MODE_LIST, MODE_TABS})
 7     //写法2:
 8     //@IntDef({MODE_STANDARD, MODE_LIST, MODE_TABS})
 9 
10     //3.定义注解类型
11     public @interface MODE {
12         int MODE_STANDARD = 1;      //默认是 public static final
13         int MODE_LIST = 2;
14         int MODE_TABS = 4;
15     }
16 
17     //4.使用注解 示例
18     @MODE int getMode()         { return MODE_STANDARD; }
19     void setMode(@MODE int m)   { mode = m; }
20     int mode;
21     void testMode(){
22         int m1 = MODE_LIST;
23         int m2 = getMode();
24         setMode(m1);
25         m2 = getMode();
26 
27         m2 = m1 | MODE_LIST & MODE_TABS ;
28 
29     }
复制代码

2.3 kotlin示例

复制代码
 1     //1.指定注解的保留策略,AnnotationRetention.SOURCE表示只保留源码中,编译时删除。还有CLASS和RUNTIME
 2     @Retention(AnnotationRetention.SOURCE)
 3     //2.定义int 值 ,
 4     @IntDef(flag = true, value = [MODE_STANDARD, MODE_LIST, MODE_TABS])
 5     //3.定义注解类型
 6     annotation class MODE {
 7         companion object {
 8             const val MODE_STANDARD   = 1
 9             const val MODE_LIST       = 2
10             const val MODE_TABS       = 4
11         }
12     }
13     //4.使用注解 示例
14     fun resetMode(@MODE m: Int) {
15         mode = m
16     }
17     var mode: Int = 0
18 
19     fun testMode() {
20         val m1 = MODE_LIST
21 
22         resetMode(m1)
23 
24         var m2 = m1 or (MODE_LIST and MODE_TABS)
25 
26     }
复制代码

3.@StringDef

3.1 官网

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

3.2 java示例

复制代码
 1     //1.指定注解的保留策略,RetentionPolicy.SOURCE表示只保留源码中,
 2     @Retention(RetentionPolicy.SOURCE)
 3 
 4     //2.定义string值 ,它必需在 注解类型 前。
 5     @StringDef({CMD_A8, CMD_E5, CMD_H3})
 6 
 7     //3.定义注解类型,
 8     public @interface CMD {
 9         public static final String CMD_A8 = "A8";
10         public static final String CMD_E5 = "E5";
11         public static final String CMD_H3 = "H3";
12     }
13     //4.使用
14     void sendData(@CMD String cmd,String data){
15         //... connect socket ,
16         // socket.send
17     }
18     //5.测试
19     void testStringDef(){
20         //sendData("cmd","data");//error ,"cmd"不是 定义的那几个值中的一个。
21         sendData(CMD_A8,"hello");
22     }
复制代码

3.3 kotlin示例

复制代码
 1     //1.指定注解的保留策略,AnnotationRetention.SOURCE表示只保留源码中,
 2     @Retention(AnnotationRetention.SOURCE)
 3     //2.定义string值 ,它必需在 注解类型 前。
 4     @StringDef(A8,E5,H9)
 5     //3.定义注解类型,
 6     annotation class CMD {
 7         companion object {
 8             const val A8   = "A8"
 9             const val E5   = "E5"
10             const val H9   = "H9"
11         }
12     }
13 
14     //4.使用
15     fun sendData(@CMD cmd: String, data: String) {
16         //... connect socket ,
17         // socket.send
18     }
19 
20     //5.测试
21     fun testStringDef() {
22         sendData("cmd","data");//error ,"cmd"不是 定义的那几个值中的一个。
23         sendData(A8, "hello")
24     }
复制代码

 

posted @   f9q  阅读(4771)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示