scala中case class为何不用new可以直接使用
时间: 2024-04-09 11:29:05 浏览: 105
在Scala中,case class是一种特殊类型的类,它具有一些自动生成的功能和语法糖。其中一个特点是,它会自动为你生成一个伴生对象(companion object),该对象充当了工厂方法的角色。
当你定义一个case class时,Scala会自动为该类生成一个伴生对象,并在其中实现一个apply方法。这个apply方法可以直接使用类名加圆括号的方式来调用,就像调用普通函数一样。
由于伴生对象的存在,你可以直接使用case class的构造方法来创建对象,而无需使用new关键字。这是因为Scala的apply方法会在背后调用类的构造方法,帮助你创建对象。这种语法糖让代码更加简洁和易读。
因此,当你定义一个case class时,可以直接使用类名加圆括号的方式来创建对象,而无需使用new关键字。例如:
```
case class Person(name: String, age: Int)
val person = Person("John", 30)
```
在上面的例子中,我们使用Person("John", 30)来创建了一个Person对象,而不是使用new关键字。这样做更加简洁和方便。
相关问题
scala when case
回答: 在Scala中,当我们使用match表达式时,可以使用case关键字来定义模式匹配的情况。case语句序列被称为case序列,可以出现在任何允许函数字面量出现的地方。在使用*.map { case => ...}的语法中,省略了*.map()中的括号。这样的语法使得代码更加简洁和易读。
下面是一个使用case语句的例子:
```scala
import scala.util.Random
val randomInt = new Random().nextInt(10)
randomInt match {
case 7 => println("lucky seven!")
case otherNumber => println("boo, got boring ol' " + otherNumber)
}
```
以上代码中,我们使用了模式匹配来根据随机生成的数字来执行不同的逻辑。如果随机生成的数字是7,会打印"lucky seven!",否则会打印"boo, got boring ol' "加上随机数字。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [Scala里*.map { case => ...}结构的理解](https://blog.csdn.net/yians/article/details/119790288)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"]
- *3* [scala中case的用法](https://blog.csdn.net/qq_41669665/article/details/86158993)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
在scala2.11 版本中 fastjson 处理 json转case class 时默认值不生效,怎么解决
在Scala2.11版本中,Fastjson默认使用Scala2.11中的JavaBean,因此默认值无法生效。要解决这个问题,可以手动指定Fastjson使用Scala2.11的Case Class。
可以将fastjson的序列化和反序列化对象分别指定为scala的序列化库,如下所示:
```scala
import com.alibaba.fastjson.serializer.SerializeConfig
import com.alibaba.fastjson.parser.ParserConfig
implicit val config: SerializeConfig = new SerializeConfig()
implicit val pconfig: ParserConfig = new ParserConfig()
case class DemoClass(id: Int, name: String = "defaultName")
val json = """{"id": 1}"""
val obj = JSON.parseObject(json, classOf[DemoClass])
println(obj) // 输出 DemoClass(1,defaultName)
```
在这个例子中,我们手动指定了序列化和反序列化对象使用的是Scala的Case Class,这样默认值就可以生效了。
阅读全文