

Android中Enum的替代方案
source link: http://yuanfentiank789.github.io/2017/11/16/Android%E5%BC%80%E5%8F%91%E4%B8%AD%E7%94%A8%E4%BA%8E%E6%9B%BF%E4%BB%A3Enum%E7%9A%84@IntDef%E7%9A%84%E4%BD%BF%E7%94%A8/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在Android的官方文档的内存管理中http://developer.android.com/training/articles/memory.html#Overhead 提到由于Enum通常需要两倍以上的存储空间,因此应当尽量避免Enum的使用。对此,Google官方推出了IntDef作为对Enum的替代。以下通过一个具体的例子来说明其用法: 例如我们有如下的一组Enum:
public enum Color{
RED, BLUE, YELLOW, GREEN, PURPLE, WHITE, BLACK
}
现在我们要做的是找出其替代方法,首先我们要做的是定义常量:
public static final int RED = 0;
public static final int BLUE = 1;
public static final int YELLOW = 2;
public static final int GREEN = 3;
public static final int PURPLE = 4;
public static final int WHITE = 5;
public static final int BLACK = 6;
在常量定义了之后,事实上我们已经可以使之作为对Enum的替代了,但是在实际的开发过程中写的代码如果换成了其他的变量名,编译器并不能够报错。基于此背景,IntDef应运而生。在定义了常量之后,我们首先需要用一个@IntDef({})将其全部变量包含,其次需要一个Retention声明其保留级别,最后定义其接口名称,具体代码为:
@IntDef({RED, BLUE, YELLOW, GREEN, PURPLE, WHITE, BLACK})
@Retention(RetentionPolicy.SOURCE)
public @interface Color{};
在使用的时候,例如我们有一个变量名称为:
int color;
与此同时有一个函数:
void setColor(@Color int COLOR){
color = COLOR;
}
在调用此函数的时候,参数名称如果不是IntDef中的变量名称的时候,例如setColor(2),Android Studio中就会提示错误(虽然编译仍然会通过)。 在使用的时候需要在gradle中加入:
compile 'com.android.support:support-annotations:23.0.1'
Recommend
-
33
作者 | Marija Naumovska 策划 | 田晓旭 Jenkins 是目前最常用的持续集成工具,拥有近 50% 的市场份额,它还是很多技术团队的第一...
-
22
Airtable 的 Open Source 替代方案 Baserow 在 Hacker News Daily 上看到的產品 Baserow,另外在 Hacker New...
-
8
谈导航栏返回按钮的替代方案 呼,又要夜间上新了。其实自己偶尔还会进去关于Be For Web里面看看将近两年前写的博客开篇语。当时的动力现在仍在,当...
-
11
Plausible:注重隐私的 Google Analytics 替代方案 | Linux 中国Plausible 让你摆脱 Google Analytics 的束缚,我将在本文中讨论这个开源项目。来源:
-
22
Wecom酱 通过企业微信向微信推送消息的解决方案。包括: 配置说明(本页下方) 推送函数(支持多种语言,见本页下方) 自行搭建的在线服务源码 ...
-
4
EIP-3074有哪些替代方案? 以太坊爱好者 2021-06-29 10:09 摘要: 对EIP-3074的批评以及一种简单的替代 ...
-
11
V神:基尼系数的替代方案看这里 巴比特资讯 2021-07-30 14:00 摘要: 反对基尼系数在加密货币中的过度使用。 ...
-
5
macOS 属于类 Unix 系统,但它并不是 Linux,因此如果/当我们需要使用 docker 之类的 linux 工具时,很不幸我们需要像在 Windows 世界中一样安装 VM 才行。Docker 当然也得这么干。 像大多数人一样,我多年来一直使用 Docker...
-
8
微软 Exchange 的一个开源替代方案 | Linux 中国开源用户现在有了一个强大的、功能齐全的群件选择。来源:https://linux.cn...
-
4
supabase/supabase: 开源Firebase 替代方案 在不到 2 分钟的时间内创建一个后端。使用 Postgres 数据库、身份验证、即时 API、实时订阅和存储开始您的项目...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK