Chinaunix首页 | 论坛 | 博客
  • 博客访问: 278862
  • 博文数量: 64
  • 博客积分: 3099
  • 博客等级: 中校
  • 技术积分: 615
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-29 19:38
文章分类

全部博文(64)

文章存档

2015年(1)

2014年(7)

2013年(6)

2012年(3)

2010年(11)

2009年(3)

2008年(19)

2007年(14)

我的朋友

分类: Java

2014-05-15 15:49:47

在遇到如下问题的时候,会希望能够动态的加载一个类:

功能做成了插件的形式,比如放在了某个jar包里,能够随时使用随时加载;
不确定要加载的类是否存在。

java的反射机制可以用于完成此任务。
首先要加载的类需要有公共的接口,如:

点击(此处)折叠或打开

  1. package com.haibin.test.utils;

  2. public interface Animal {
  3.     public void speak();
  4. }
要加载的类实现这个接口,如:

点击(此处)折叠或打开

  1. public class Dog implements Animal {
  2.     public void speak(){
  3.         Log.d("test","wangwang");
  4.     }
  5. }
接下来就是关键了,用Class.forName获得类,使用Class.getClassLoader().loadClass(className)).newInstance()加载类并创建实例, 配合类型转换来使用。

点击(此处)折叠或打开

  1. try {
  2.                 String className = "com.haibin.test.utils.Dog";
  3.                 Class someClass = Class.forName(className);
  4.                 Object o = (someClass.getClassLoader().loadClass(className)).newInstance();
  5.                 ((Animal) o).speak();
  6.             } catch (ClassNotFoundException e) {
  7.                 // TODO Auto-generated catch block
  8.                 e.printStackTrace();
  9.             } catch (InstantiationException e) {
  10.                 // TODO Auto-generated catch block
  11.                 e.printStackTrace();
  12.             } catch (IllegalAccessException e) {
  13.                 // TODO Auto-generated catch block
  14.                 e.printStackTrace();
  15.             }
阅读(644) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~