Scala通过类名称字符串构建实例

最近有一个这样的需求,定义好功能入口,通过传递不同的参数实现不同的功能,而各个功能的具体是实现是在类里面,由此需要通过传递进来的字符窜去构建需要的类。

类似Java,Scala也是可以通过反射机制去创建实例

通过Class.forName("类名称").newInstance()可以得到相应的实例

package com.haizhi.minplat

/**
  * Created by zhoujiamu on 2018/12/20.
  */

class HaHa() {    // 无惨类
  def hello(): String = "hahaha~~~"
}


class Person(name: String, country: String) {     // 有参数的类

  def this(name: String) = {
    this(name, "en...")
  }

  def hello(): String = s"My name is $name, I from $country"

}

object Test {

  def main(args: Array[String]): Unit = {

    // 无参类实例化
    val c1 = Class.forName("com.haizhi.minplat.HaHa")
    val obj1 = c1.newInstance().asInstanceOf[HaHa]

    println(obj1.hello())


    // 带参数类实例化, 2个参数构造
    val c2 = Class.forName("com.haizhi.minplat.Person")
    val constructor = c2.getConstructor(classOf[String], classOf[String])
    val obj2 = constructor.newInstance("person", "China").asInstanceOf[Person]

    println(obj2.hello())


    // 带参数类实例化, 单个参数构造
    val c3 = Class.forName("com.haizhi.minplat.Person")
    val constructor1 = c3.getConstructor(classOf[String])
    val obj3 = constructor1.newInstance("person").asInstanceOf[Person]

    println(obj3.hello())

  }
}

运行结果如下

hahaha~~~
My name is person, I from China
My name is person, I from en...

至此,通过反射机制类创建类实例已完成,有不妥之处欢迎comment。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值