3 回答
TA贡献2041条经验 获得超4个赞
class C 定义一个类,就像在Java或C ++中一样。
object O创建一个单例对象O作为某些匿名类的实例;它可用于保存与某些类的实例不相关的静态成员。
object O extends T使对象O成为的实例trait T; 然后您可以通过O任何地方,这T是预期的。
如果有class C,那么类object C的伴随对象C ; 请注意,伴随对象不会自动成为的实例C。
另请参阅Scala文档以获取对象和类。
用作静态成员的主机
大多数情况下,您需要一个object来保存无需首先实例化某个类的实例即可使用的方法和值/变量。这种用法与staticJava中的成员紧密相关。
object A {
def twice(i: Int): Int = 2*i
}
然后,您可以使用调用上述方法A.twice(2)。
如果twice是某个类的成员A,那么您需要首先创建一个实例:
class A() {
def twice(i: Int): Int = 2 * i
}
val a = new A()
a.twice(2)
您可以看到这是多么冗余,因为twice它不需要任何特定于实例的数据。
用作特殊的命名实例
您也可以将object自身用作类或特征的某些特殊实例。执行此操作时,您的对象需要扩展一些对象trait才能成为其子类的实例。
考虑以下代码:
object A extends B with C {
...
}
此声明首先声明一个匿名类(不可访问),该类同时扩展了B和C,并实例化名为的此类的单个实例A。
这个装置A可以被传递到期望类型的对象的功能B或C,或B with C。
的附加功能 object
Scala中还存在一些对象的特殊功能。我建议阅读官方文档。
def apply(...) 启用的常规方法的无名称语法 A(...)
def unapply(...)允许创建自定义模式匹配提取器
如果附带同名的类,则对象在解析隐式参数时将扮演特殊角色
- 3 回答
- 0 关注
- 926 浏览
添加回答
举报