创建已加载 类 的实例
Creating instances of loaded classes
我对 class 加载程序很陌生,有问题,想知道这是否可行:我在 class 文件中有一个 class(已编译,没有 src 代码) - Hidden.class。我有一个自定义 class 加载程序,它能够像这样加载 class:
CustomClassLoader loader = new CustomClassLoader();
// load class
try {
loader.loadClass("Hidden");
// instantiate the class here and use it
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
我想创建此 Hidden class 的实例并从中调用一些 public 方法。可能吗?
您可以如下创建实例和调用方法:
您已经在使用自己的 class 加载程序,因此方法 loadClass("Hidden") 将 return Class class 对象指的是你隐藏的 class。
try {
Class<?> c = loader.loadClass("Hidden"); // create instance of Class class referring Hidden class using your class loader object
Object t = c.newInstance();// create instance of your class
Method[] allMethods = c.getDeclaredMethods();
for (Method m : allMethods) {// get methods
String mname = m.getName();// get method name
try {
m.setAccessible(true);
m.invoke();//change as per method return type and parameters
} catch (InvocationTargetException x) {
// code here
}
}
// production code should handle these exceptions more gracefully
} catch (ClassNotFoundException x) {
x.printStackTrace();
} catch (InstantiationException x) {
x.printStackTrace();
} catch (IllegalAccessException x) {
x.printStackTrace();
}
此处 Class.forName("Hidden");
将给出 Class class 引用您的 class Hidden
的对象。使用此引用,您可以获得所有字段、方法、构造函数,您可以根据需要使用它们。
我对 class 加载程序很陌生,有问题,想知道这是否可行:我在 class 文件中有一个 class(已编译,没有 src 代码) - Hidden.class。我有一个自定义 class 加载程序,它能够像这样加载 class:
CustomClassLoader loader = new CustomClassLoader();
// load class
try {
loader.loadClass("Hidden");
// instantiate the class here and use it
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
我想创建此 Hidden class 的实例并从中调用一些 public 方法。可能吗?
您可以如下创建实例和调用方法:
您已经在使用自己的 class 加载程序,因此方法 loadClass("Hidden") 将 return Class class 对象指的是你隐藏的 class。
try {
Class<?> c = loader.loadClass("Hidden"); // create instance of Class class referring Hidden class using your class loader object
Object t = c.newInstance();// create instance of your class
Method[] allMethods = c.getDeclaredMethods();
for (Method m : allMethods) {// get methods
String mname = m.getName();// get method name
try {
m.setAccessible(true);
m.invoke();//change as per method return type and parameters
} catch (InvocationTargetException x) {
// code here
}
}
// production code should handle these exceptions more gracefully
} catch (ClassNotFoundException x) {
x.printStackTrace();
} catch (InstantiationException x) {
x.printStackTrace();
} catch (IllegalAccessException x) {
x.printStackTrace();
}
此处 Class.forName("Hidden");
将给出 Class class 引用您的 class Hidden
的对象。使用此引用,您可以获得所有字段、方法、构造函数,您可以根据需要使用它们。