首页 > 编程 > Java > 正文

Java反射机制总结学习--动态加载类

2019-11-06 06:49:56
字体:
来源:转载
供稿:网友

首先有如下代码:

public class DynamicLoadClass { public static void main(String[] args) { if("A".equals(args[0])){ A a = new A(); a.PRint(); }else if("B".equals(args[0])){ B b = new B(); b.print(); } }}class A{ void print(){ System.out.println("A"); }}class B{ void print(){ System.out.println("A"); }}

上面代码可以正常编译、运行。但是如果此时没有B类,而且,我们的需求也不需要B类,就只用A类的方法就可以了,这个时候我们就需要main函数的代码,然后重新编译运行。另一种情况,我们又添加了一个C类,我们又要继续添加else if。。。试想,如果有100个类,我们就要写100个if else,这绝对不是一种合理的方法。 接下来,就介绍动态加载类的方法:

public class DynamicLoadClass { public static void main(String[] args) { try { //动态加载类 Class c = Class.forName("com.wj.demo.dynamicLoadClass.B");//这个地方可以根据需要写上相应的类,避免了写很多个if else的情况。 MyInterface myClass = (MyInterface) c.newInstance();//使用类的类类型创建类的实例,并且上转型 myClass.start();//这个地方,将调用B类的start方法. } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalaccessException e) { e.printStackTrace(); } }}public interface MyInterface { void start();}public class A implements MyInterface{ @Override public void start() { System.out.println("A"); }}public class B implements MyInterface { @Override public void start() { System.out.println("B"); }}

以上就是动态加载类的方法。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表