scala中什么时候用new,什么时候不用
时间: 2023-10-26 17:05:21 浏览: 94
在Scala中,当你要创建一个对象时,通常要使用new关键字。但是,当你使用“伴生对象”(Companion Object)的时候,就不需要使用new关键字来创建对象了。伴生对象是与类名相同且包含静态成员的对象,它实际上是该类的一个单例对象。因此,你可以直接使用类名加圆括号来创建一个对象,而不必使用new关键字。
相关问题
scala中case class为何不用new可以直接使用
在Scala中,`case class`是一种特殊类型的类,它被设计用于模式匹配和不可变数据结构。与普通的类不同,`case class`具有一些自动生成的方法和功能。
其中一个特性是,Scala编译器会自动为`case class`生成一个伴生对象,并在其中实现一个工厂方法(称为`apply`方法)。这个工厂方法允许我们在创建`case class`对象时省略使用`new`关键字。
当我们使用`case class`时,可以直接通过调用其伴生对象的`apply`方法来创建对象。这样做的好处是可以简化代码,使代码更加清晰易读。
例如,假设有一个名为`Person`的`case class`:
```scala
case class Person(name: String, age: Int)
```
我们可以直接使用`Person("Alice", 25)`来创建一个`Person`对象,而不需要使用`new Person("Alice", 25)`。
这种语法糖使得使用`case class`更加方便和简洁。
Scala中set是否可用new调用构造函数
在Scala中,`Set` 是一个特质(Trait),表示一系列的不重复元素的集合。Scala提供了一个预定义的、不可变的 `Set` 实现,以及可变的 `Set` 实现,分别是 `scala.collection.immutable.Set` 和 `scala.collection.mutable.Set`。
当你想要创建一个新的 `Set` 实例时,通常情况下你会使用伴生对象中提供的工厂方法而不是直接使用 `new` 调用构造函数。例如,如果你要创建一个不可变的 `Set`,你可以这样写:
```scala
val mySet = Set(1, 2, 3)
```
如果你确实想要使用 `new` 关键字来创建一个 `Set` 的实例,通常是在使用某个特定的可变集合类时。例如,使用 `scala.collection.mutable.HashSet` 创建一个可变的 `HashSet`:
```scala
val myMutableSet = new scala.collection.mutable.HashSet[Int]
```
然而,大多数情况下,我们推荐使用集合的工厂方法而不是直接用 `new`,因为工厂方法能够提供更加简洁的语法,并且能够自动选择最合适的集合实现。
阅读全文