虽然这是 kotlin
但本质上都一样啦
加载代码
import java.io.File import java.net.URLClassLoader object Main { @JvmStatic fun main(args: Array<String>) { val clazzFile = File("test.zip") val classLoader = URLClassLoader(arrayOf(clazzFile.toURI().toURL()), URLClassLoader.getSystemClassLoader()) val clazz = classLoader.loadClass("com.test.Test") val instance = clazz.getConstructor().newInstance() val method = clazz.getMethod("count", Array<String>::class.java) println(method.invoke(instance, arrayOf("1", "2", "3"))) } }
Test 类代码
package com.test; public class Test { public int count(String... args) { return args == null ? -1 : args.length; } }
运行结果
3 进程已结束,退出代码为 0
基本步骤就是
URLClassLoader
classLoader
的 loadClass
方法加载要加载的 jar 里的 类顺便再记录一下 Kotlin 反射传入可变参数的方法
使用 Array
的泛型就好
Array<String>::class.java