Scala--创建对象的5种方式

本文介绍了在Scala中创建对象的五种方法:1) 通过伴生类的构造函数;2) 利用伴生对象的apply方法;3) 使用反射的classOf方法;4) 实现Clonable特质并覆写clone方法进行克隆;5) 通过反序列化创建或克隆对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 直接使用伴生类的构造函数

object Test {
  def main(args: Array[String]): Unit = {
    val user: User = new User
  }
}
class User{
}

2 使用伴生对象的apply方法(间接使用伴生类的构造函数)

object Test {
  def main(args: Array[String]): Unit = {
    val user: User = User.apply()
    // 也可以省略为 val user: User = User()
  }
}
class User{}
object User{
  def apply() = {
    new User
  }
}

3 使用反射(使用Predef提供的classOf方法)

object Test {
  def main(args: Array[String]): Unit = {
    val clazz: Class[User] = classOf[User]
    val user = clazz.newInstance()
  }
}
class User{}

4 使用clone方法
前提:类要继承Clonable特质,重写clone方法。利用已有对象,克隆出新的对象。

object Test {
  def main(args: Array[String]): Unit = {
    val user1: User = new User
    println("user1: " + user1)
    val user2: User = user1.clone()
    println("user2: " + user2)
    println(user1 eq user2) // 比较内存地址
  }
}
class User extends Cloneable {
  var name = "zhangsan"
  var age = 20
  override def clone(): User = {
    var user : User = null
    try{
      user = super.clone().asInstanceOf[User]
    }catch{
      case ex : Exception => println(ex.getMessage)
    }
    user
  }

  override def toString: String =  s"User{name=$name, age=$age}"
}

运行结果:

user1: User{name=zhangsan, age=20}
user2: User{name=zhangsan, age=20}
false // 内存地址不一样,说明是两个不同的对象

5 使用反序列化
客户端向服务器发送序列化后的class对象或者实例对象,服务器接收后经过反序列化,可以直接获得class对象或实例对象。class对象则可以直接用newInstance方法创建新对象,或者通过传递实例对象调用clone方法,进行对象克隆。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值