zoukankan      html  css  js  c++  java
  • class.forName()

    Class.forName(xxx.xx.xx)返回的是一个类
    Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类
    A a = (A)Class.forName(“pacage.A”).newInstance(); 这和你 A a = new A(); 是一样的效果。
    多数用法为:
    String className = readfromXMlConfig;//从xml 配置文件中获得字符串 class c = Class.forName(className); factory = (ExampleInterface)c.newInstance();
    这样className可以多变 代码复用率大大提高

    public static final String[] NPCTRIGGER_CLASS_PATH =  {
            "com.quest.",
            "com.activity.",
        };
    public NpcTrigger createNpcTriggerInstance(String triggerClassName)throws Exception{
            NpcTrigger nt = null;
            for (String str : NPCTRIGGER_CLASS_PATH) {
                Class<?> c = null;
                try {
                    c = Class.forName(str+triggerClassName);
                } catch (Exception e1) {
                    continue;
                }
                if (c == null) {
                    continue;
                }
                nt = (NpcTrigger)c.newInstance();
                break;
                }
            return nt;
        }
    这样就方便很多 Class<?>它是个通配泛型,?可以代表任何类型

    更深入了解
    首先,newInstance( )是一个方法,而new是一个关键字; 其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用 new关键字生成对象没有这个限制。
    简言之: newInstance(): 弱类型,低效率,只能调用无参构造。 new: 强类型,相对高效,能调用任何public构造。 Class.forName(“”)返回的是类。 Class.forName(“”).newInstance()返回的是object 。

    在使用JDBC时只需要Class.forName(XXX.XXX);就可以了 不需要调用newInstance( )

    摘抄自http://blog.csdn.net/kaiwii/article/details/7405761
  • 相关阅读:
    折腾,折腾!VM7.0 虚拟机安装雪豹Mac OS snow leopard 10.6!
    STM32启动代码概述
    【淘宝装修】PS DW 介绍 教程 代码(终极篇)
    讲讲volatile的作用
    MSB与LSB
    PLL
    Bootloader之uBoot简介(转)
    AMBA、AHB、APB总线简介
    安装VMWARE WORKSTATION,提示“你已经安装过VMware,请先卸载后再安装”的解决方法
    YII 建立目录项目 YIIC
  • 原文地址:https://www.cnblogs.com/qiangqiangqiang/p/7645708.html
Copyright © 2011-2022 走看看