支持国产操作系统国产应用!

捉蛋网

当前位置: 捉蛋网>教程>Android开发>

我们看看两个 case 对象(2)

时间:2013-12-08 23:54来源:网络整理 作者: 点击:
Measurement 是一个 case 类。这是 Scala 中的一个方便的特性。用 case 修饰一个类会导致这个类生成这样一个构造函数:这个构造函数需要类的属性,以及 equals 、 hashCode 和 toString 的实现。它对于像 Measureme

Measurement 是一个 case 类。这是 Scala 中的一个方便的特性。用 “case” 修饰一个类会导致这个类生成这样一个构造函数:这个构造函数需要类的属性,以及 equalshashCodetoString 的实现。它对于像 Measurement 这样的数据结构类非常适合。它还为定义的属性(在这里就是 uomamount)生成 getter 方法。也可以将那些属性定义为 vars(可变变量),然后也会生成 setter 方法。仅仅一行 Scala 代码可以做这么多事情!

 

接下来,UnitsConverter 也是一个单例模式,因为它是使用 object 关键词定义的。它只有一个 convert 方法。注意,convert 被定义为相当于一条单一语句 — 一条 match 语句。它是一个单一表达式,所以不需要额外的花括号。它使用 Scala 的模式匹配。这是函数式编程语言中常见的一个强大特性。它类似于 Java 语言和很多其他语言中的 switch 语句。但是,我们可以匹配字符串(实际上,还可以有比这高级得多的匹配)。如果字符串匹配,则执行适当的计算,并返回格式化的字符串,以供显示。最后,注 意与 _ 匹配的最后一个 case。Scala 中的很多地方使用下划线作为通配符。在这里,它表示匹配任何东西,这类似于 Java 语言中的 default 语句。

现在,我们理解了应用程序中的计算,最后来看看剩下的 UI 设置和菜单。

UI 初始化和菜单

回到清单 4。我们说过要看看 setUomChoice。这个方法被定义为带有一个 UnitsSystem 类型的参数。我们来看看如何定义这个类型。


清单 7. UnitsSystem

 

Java代码

我们看到,UnitsSystem 是一个密封的 case 类,没有属性。看上去它不是很有用。接下来,我们看看两个 case 对象。还记得吗,object 表示 Scala 中的一个单例。在这里,有两个 case 对象,每个 case 对象都扩展 UnitsSystem。这是 Scala 中的一个常见的特色,它可以提供更简单、更类型安全的枚举方式。

 

现在 setUomChoice 的实现更加合理。在获得微调器的一个句柄后,我们匹配传入的 UnitsSystem 的类型。这标识了我们在前面见到的 arrays.xml 中的一个数组。这是使用 Android SDK 生成的 R 类表示资源,例如 arrays.xml 文件。一旦知道使用哪个数组,我们就通过创建一个传入微调器的适配器(在这里是一个 ArrayAdapter), 使用那个数组作为微调器的数据源。

最后,看看清单 4 中的 onCreateOptionsMenuonMenuItemSelected 方法。这些方法是在 Activity 中定义的,我们将在 Converter 活动中覆盖这些方法。第一个方法创建一个菜单。第二个方法处理用户从菜单中选择 English 或 metric 的事件。它再次调用 setUomChoice。 这使用户可以在从英制单位转换为公制单位与从公制单位转换为英制单位之间进行切换。

结束语

Android 平台的架构使它可以用于在 Java 虚拟机上运行的任何编程语言。我们看到了如何设置 Android 项目,使它使用 Scala 代码。这个过程也可以延伸到其他 JVM 编程语言,例如 Groovy、JRuby 或 Fan。当可以任意使用 Scala 编程语言时,编写 Android 应用程序将变得更轻松。您仍可以使用 Eclipse 进行开发。仍然可以在 Eclipse 中用模拟器和设备进行调试。您可以继续使用所有的工具,同时又得到一种生产率更高的编程语言。

(责任编辑:捉蛋网-刷机)
............................................................................................... ...............................................................................................

 

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------