Forráskód Böngészése

feat: 添加特征反射工具

许家凯 4 éve
szülő
commit
50b8cb506e

+ 27 - 2
src/main/scala/com/winhc/bigdata/spark/utils/ReflectUtils.scala

@@ -1,14 +1,39 @@
 package com.winhc.bigdata.spark.utils
 
+import com.winhc.bigdata.spark.jobs.chance.CompanyChangeHandle
+import org.reflections.Reflections
+
+import scala.collection.JavaConverters._
+
 /**
  * @Author: XuJiakai
  * @Date: 2020/7/27 17:01
  * @Description:
  */
 object ReflectUtils {
-  def getClazz[T](clazzName: String, initargs: Any*): T = {
+  def getClazz[T](clazzName: String, initArgs: Any*): T = {
     Class.forName(clazzName)
-      .getConstructors.head.newInstance(initargs.asInstanceOf[Seq[Object]]: _*)
+      .getConstructors.head.newInstance(initArgs.asInstanceOf[Seq[Object]]: _*)
       .asInstanceOf[T]
   }
+
+  def subTraitClassName[T](underlying: Class[T], prefix: String): Seq[String] = {
+    val reflects = new Reflections(prefix)
+    reflects
+      .getSubTypesOf(underlying)
+      .asScala.map(_.getName).toSeq
+  }
+
+  def subObject[T](underlying: Class[T], prefix: String): Seq[T] = {
+    subTraitClassName(underlying, prefix).map(clazzName => {
+      Class.forName(clazzName)
+        .getConstructors.head.newInstance()
+        .asInstanceOf[T]
+    })
+  }
+
+  def main(args: Array[String]): Unit = {
+    val a = subTraitClassName[CompanyChangeHandle](classOf[CompanyChangeHandle], "com.winhc.bigdata.spark.jobs.chance")
+    println(a)
+  }
 }