scala之Scala 案例类可以排除 setter 吗
Leo_wl
阅读:13
2024-09-03 21:39:00
评论:0
Scala 案例类是否可以排除 setter,例如那:
case class Foo (foo: String, bar: Integer)
将封装一个命名的 String 和 Integer,并使它们在外部保持不变。
或者,等效地,您能否在一行普通代码中创建一个具有输入参数和它们的 getter 的无主体类?
请您参考如下方法:
默认情况下,Scala 中的所有类都没有 setter,除非明确说明,甚至是 case 类。 foo
和 bar
都是 val,而不是 var(在函数式编程的世界中数据不可变的脉络),所以案例类已经缺少 setter,正如所希望的那样。
观看:
scala> case class Foo(foo: String, bar: Integer)
defined class Foo
scala> val a = Foo("hello", 12)
a: Foo = Foo(hello,12)
scala> a.foo = "meh"
<console>:10: error: reassignment to val
a.foo = "meh"
^
scala> case class MutableFoo(var foo: String, var bar: Integer)
defined class MutableFoo
scala> val b = MutableFoo("hello", 21)
b: MutableFoo = MutableFoo(hello,21)
scala> b.foo = "bleh"
b.foo: String = bleh
scala> b
res10: MutableFoo = MutableFoo(bleh,21)
至于创建一个 class
和不是 case class
的 getter,当然,这也很简单:
scala> class Bar(val foo: String, val bar: Int)
defined class Bar
scala> val c = new Bar("hi", 22)
c: Bar = Bar@43c89f32
scala> c.foo
res11: String = hi
scala> c.bar
res12: Int = 22
在这里你只需要显式地把 val
放在构造函数的参数中来告诉编译器你想要创建公共(public)字段,而不是私有(private)字段,当然这适用于 var
太像以前了
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。