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