在遇到如下问题的时候,会希望能够动态的加载一个类:
功能做成了插件的形式,比如放在了某个jar包里,能够随时使用随时加载;
不确定要加载的类是否存在。
java的反射机制可以用于完成此任务。
首先要加载的类需要有公共的接口,如:
-
package com.haibin.test.utils;
-
-
public interface Animal {
-
public void speak();
-
}
要加载的类实现这个接口,如:
-
public class Dog implements Animal {
-
public void speak(){
-
Log.d("test","wangwang");
-
}
-
}
接下来就是关键了,用
Class.forName获得类,使用Class
.getClassLoader().loadClass(className
)).newInstance()加载类并创建实例, 配合类型转换来使用。
-
try {
-
String className = "com.haibin.test.utils.Dog";
-
Class someClass = Class.forName(className);
-
Object o = (someClass.getClassLoader().loadClass(className)).newInstance();
-
((Animal) o).speak();
-
} catch (ClassNotFoundException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
} catch (InstantiationException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
} catch (IllegalAccessException e) {
-
// TODO Auto-generated catch block
-
e.printStackTrace();
-
}
阅读(686) | 评论(0) | 转发(0) |