当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

在Java中动态实施类的静态办法[Java编程]

赞助商链接



  本文“在Java中动态实施类的静态办法[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

在Java中,通过Class.forName()办法可以动态决意加载哪一个类,这个功效关于相同接口的差别实现来说非常有效.比方关于计划好的数据库衔接池接口,我们可以有多种的接口实现类来完成相同的功效,同时用户可以简单的通过改正配置文件来指定实际利用哪一个实现类,在源代码里面通过读取配置文件信息,并用Class.forName(configClassName).getInstance()便可以构造一个特定的实现类实例,而不用每次改正源代码.这样关于程序来说只用关心接口的定义,用户只用举行配置文件的设置就完成了同一功效的差别实现的切换.

但是假照实现类需求通过静态办法来举行初始化的时刻,动态加载的历程就会复杂一些.一样的以数据库衔接池为例,普通衔接池的构造函数城市被定义为私有的,而通过自定义的getInstance()静态办法来得到唯一实例.这种情形下简单的通过Class.forName().getInstance()就无法精确构造实例.

好在Java所供应的反射机制(Reflection)为我们供应了完好了探悉类内部构造的办法.通过反射机制,我们可以完成基本上全部的运行时决意的行动(固然这一实现要比其他动态语言,比方PHP,的eval()的利用要复杂的多).

下面通过实际的例子阐明如安在运行时动态拜候类的静态办法.

-------------------------------------------------------
*/
import java.lang.reflect.*;
public class myTestClass{
 private static Object pLock = new Object();
 private static myTestClass p_instance = null;
 private String s_configName = "";
 private boolean b_isFromResource = true;
 public static Object getInstance(String sConfigName,
 Boolean bIsFromResource){
  synchronized(pLock){
   if(null == p_instance){
    p_instance =new myTestClass(sConfigName,bIsFromResource);
   }
  }
  return p_instance;
 } 
 private myTestClass(String sConfigName,Boolean bIsFromResource){
  s_configName = sConfigName;
  b_isFromResource = bIsFromResource.booleanValue();
 }
 public void echoInfo(){
  System.out.println("current arguments : configName=["+
   s_configName+"],isFromResource=["+b_isFromResource+"]");
 }
 public static void main(String[] args) throws Exception{
  // 设置办法的传入参数的范例.
  Class[] parameterTypes = new Class[]{
   java.lang.String.class,
   java.lang.Boolean.class
  };
  Method mGetInstance = null;
  String className = "myTestClass";
  Class curTestClass = Class.forName(className);
  try{
   mGetInstance = curTestClass.getMethod("getInstance",parameterTypes);
  }
  catch(NoSuchMethodException e){
   e.printStackTrace();
   mGetInstance = null;
  }
  if(mGetInstance != null){
   myTestClass pObj = (myTestClass)
    mGetInstance.invoke(null,new Object[]{
     "src/myconfig.properties",
     Boolean.FALSE
    }
   );
   pObj.echoInfo();
  }
  else{
   throw
    new Exception("myTest Init Failed from class" +
     className +
     System.getProperty("line.seperator","
") +
     "method getInstance(String, Boolean) exists.");
  }
 }
}


  以上是“在Java中动态实施类的静态办法[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 在java中产生切确的行为
  • rtti在java造型前的查抄
  • <b>如安在Java编程中操纵线程</b>
  • cookie技术在Java ME平台的操纵与实现
  • 在Java中操纵VC++组件
  • 在Java中操纵SQLite的教程
  • 在Java中读取写入XML文件(DEMO_004)
  • 在Java操纵程序中成立图象
  • 在Java中操纵Factory Method筹划情势
  • <b>在Java中操纵筹划情势之Singleton</b>
  • <b>在Java中操作UDP</b>
  • 在Java中举行事件处理的办法
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .