什么是枚举?
枚举是指一个经过排序的,被打包成一个单一实体的项列表。一个枚举的实例可以使用枚举项列表中任意单一项的值,通常用来表示数目有限、形式离散,表达又极为明确的量。
换句话说,枚举像是我们自己定义的一个数据集,里面的元素是我们自认为可以分类在一起的,元素确定且有限,供程序在其他地方使用。
需求
在Android工厂测试中有许多测试条目,每一条目的名称和跳转的测试页面不同,但是这些数据都是明确的不会轻易变更的,所以用到了枚举来实现。
实现
枚举类
public enum TestCase {
TestOne("com.testproject", "com.testproject.activity.Test1Activity", "test one"),
TestTwo("com.testproject", "com.testproject.activity.Test2Activity", "test two"),
TestThree("com.testproject", "com.testproject.activity.Test3Activity", "test three");
public String packageName;
public String className;
public String testName;
TestCase(String packageName, String className, String testName) {
this.packageName = packageName;
this.className = className;
this.testName = testName;
}
}
读取枚举类中的所有实例,将其转换成自己所需的数据结构。
private void initData() {
List<Map<String, Object>> data = new ArrayList<>();
//创建枚举类型所有实例的集合
// Set<TestCase> set = Collections.synchronizedSet(EnumSet.allOf(TestCase.class));
Set<TestCase> set = EnumSet.allOf(TestCase.class);
//获取集合的迭代器
Iterator iterator = set.iterator();
//循环获取实例,然后转换成想要数据
while (iterator.hasNext()) {
Intent intent = new Intent();
TestCase testCase = (TestCase) iterator.next();
intent.setClassName(testCase.packageName, testCase.className);
Map<String, Object> map = new HashMap<>();
map.put("intent", intent);
map.put("testName", testCase.testName);
data.add(map);
}
}
根据包名和类名跳转Activity
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = (Intent) data.get(position).get("intent");
startActivity(intent);
}
EnumSet类
EnumSet是一个专为枚举设计的集合类,里面的元素是我们指定的类型的枚举值。当枚举实例较多时,可以使用其来操作对应的枚举实例。EnumSet使用简介