Kaynağa Gözat

fix:反射类

许家凯 3 yıl önce
ebeveyn
işleme
b0deaf5246

+ 17 - 11
src/main/scala/com/winhc/bigdata/spark/utils/ReflectUtils.scala

@@ -1,6 +1,6 @@
 package com.winhc.bigdata.spark.utils
 
-import com.winhc.bigdata.spark.jobs.chance.CompanyChangeHandle
+import com.winhc.bigdata.spark.ng.dynamic.NgCompanyDynamicHandle
 import org.reflections.Reflections
 
 import java.lang.reflect.Modifier
@@ -13,9 +13,15 @@ import scala.collection.JavaConverters._
  */
 object ReflectUtils {
   def getClazz[T](clazzName: String, initArgs: Any*): T = {
-    Class.forName(clazzName)
-      .getConstructors.head.newInstance(initArgs.asInstanceOf[Seq[Object]]: _*)
-      .asInstanceOf[T]
+    if (initArgs == null || initArgs.isEmpty) {
+      Class.forName(clazzName)
+        .getConstructors.head.newInstance()
+        .asInstanceOf[T]
+    } else {
+      Class.forName(clazzName)
+        .getConstructors.head.newInstance(initArgs.asInstanceOf[Seq[Object]]: _*)
+        .asInstanceOf[T]
+    }
   }
 
   def subTraitClassName[T](underlying: Class[T], prefix: String): Seq[String] = {
@@ -23,21 +29,21 @@ object ReflectUtils {
     reflects
       .getSubTypesOf(underlying)
       .asScala
-      .filter(r=> !Modifier.isAbstract(r.getModifiers))
+      .filter(r => !Modifier.isAbstract(r.getModifiers))
       .map(_.getName)
       .toSeq
   }
 
-  def subObject[T](underlying: Class[T], prefix: String): Seq[T] = {
+  def subObject[T](underlying: Class[T], prefix: String, initArgs: Any*): Seq[T] = {
     subTraitClassName(underlying, prefix).map(clazzName => {
-      Class.forName(clazzName)
-        .getConstructors.head.newInstance()
-        .asInstanceOf[T]
+      getClazz[T](clazzName, initArgs: _*)
     })
   }
 
   def main(args: Array[String]): Unit = {
-    val a = subTraitClassName[CompanyChangeHandle](classOf[CompanyChangeHandle], "com.winhc.bigdata.spark.jobs.chance")
-    println(a)
+    val handle = getClazz[NgCompanyDynamicHandle]("com.winhc.bigdata.spark.ng.dynamic.handle.company_land_transfer", true)
+    println(handle)
+    //    val a = subTraitClassName[CompanyChangeHandle](classOf[CompanyChangeHandle], "com.winhc.bigdata.spark.jobs.chance")
+    //    println(a)
   }
 }