• Java反射机制实例类


    /** 
      * 直接创建对象调用方法 
    */ 
    private static void classObject(){ 
      
    try { 
       
    //参数值 
       Object []value=new Object[]{"1","2"}; 
       
    //参数类型 
       Class par[]=new Class[]{String.class,String.class}; 
       Class c
    =Class.forName("zjnx.sibas.ReflectTest"); 
       
    //创建类对象 
       Object object=c.newInstance(); 
    //得到方法对象 
       Method method=object.getClass().getDeclaredMethod("towStringEq", par); 
       
    //调用方法 
       boolean flag=Boolean.parseBoolean(method.invoke(object, value).toString()); 
       System.out.println(
    "flag:"+flag); 
      } 
    catch (Exception e) { 
       e.printStackTrace(); 
      } 

    ** 
      
    * 调用有参构造函数,调用方法 
      
    */ 
    private static void clsssdeclaredObject(){ 
      
    try { 
       
    //参数值 
       Object []value=new Object[]{new String[]{"1","2","3"},new Integer(1)}; 
       
    //参数类型 
       Class par[]=new Class[]{String[].class,int.class}; 
       
    //构造函数参数 
       Class declared[]=new Class[]{String.class}; 
       
    //构造函数值 
       Object declaredValue[]=new Object[]{"1"}; 
       Class c
    =Class.forName("zjnx.sibas.ReflectTest"); 
       
       
    //初始化构造函数 
       Constructor constructor = c.getDeclaredConstructor(declared); 
    //新建对象 
       Object object=constructor.newInstance(declaredValue); 
    //得到方法对象 
       Method method=object.getClass().getDeclaredMethod("printValue", par); 
       
    //调用方法 
       method.invoke(object, value); 
      } 
    catch (Exception e) { 
       e.printStackTrace(); 
      } 


    private static void classMothodObject(){ 
      
    try { 
       
    //构造函数参数 
       
    //参数值 
       Object []value=new Object[]{new String[]{"1","2","3"},new Integer(1)}; 
       
    //参数类型 
       Class par[]=new Class[]{String[].class,int.class}; 
       
    //构造函数参数 
       Object declared[]=new Object[]{"1"}; 
       
    //类完整路径 
       String className="zjnx.sibas.ReflectTest"
       
       Object object
    =ReflectTest.getInstance(className, declared); 
       
    //Object object=ReflectTest.getInstance(className, null); 
       
    //得到方法对象 
       Method method=object.getClass().getDeclaredMethod("printValue", par); 
       
    //调用方法 
       method.invoke(object, value); 
      } 
    catch (Exception e) { 
       e.printStackTrace(); 
      } 
    /** 
      * 按照指定的类名称 并按照指定的参数进行构造而获取实例 
         * 
         * 限制性条件为: objects 中的className 必须和构造参数中的类型一致。 
      * 
         * 如果Object 中存在 超越 参数类型的方法将导致初始化失败!!!! 例如 getInstance("Cr", {new 
      * Integer(2)}); 将无法应用在构造 方法 Cr(Number num) 
      * 
    @param className 类名称 
      * 
    @param objects 构造方法的类名称 
      * 
    @return 返回构造出的实例 
      * 
    @throws Exception 初始化错误时返回此项例外 
      
    */ 
    public static final Object getInstance(String className, Object[] objects) { 
      
    try { 
       Class clz 
    = Class.forName(className); 
               
                
    if (objects==null ||objects.length==0
                { 
                    
    return clz.newInstance() ; 
                } 
       Class[] paramClaszz 
    = new Class[objects.length]; 
       
    for (int i = 0; i < objects.length; i++) { 
        paramClaszz[i] 
    = objects[i].getClass(); 
       } 
       Constructor constructor 
    = clz.getDeclaredConstructor(paramClaszz); 
       
    return constructor.newInstance(objects); 
      } 
    catch (Exception e) { 
       e.printStackTrace(); 
      } 
      
    return null
        /** 
         * 是不是某个类的实例 
         * 
    @param obj 实例 
         * 
    @param cls 类 
         * 
    @return 如果 obj 是此类的实例,则返回 true 
         
    */ 
        
    public boolean isInstance(Object obj, Class cls) { 
            
    return cls.isInstance(obj); 
        } 
        
    /** 
         * 得到某个对象的公共属性 
         * 
    @param owner, fieldName 
         * 
    @return 该属性对象 
         * 
    @throws Exception 
         
    */ 
        
    public Object getProperty(Object owner, String fieldName) { 
         
    try { 
          Class ownerClass 
    = owner.getClass(); 
          Field field 
    = ownerClass.getField(fieldName); 
          Object property 
    = field.get(owner); 
          
    return property; 
      } 
    catch (Exception e) { 
       e.printStackTrace(); 
      } 
      
    return null
        } 
        /** 
         * 得到某类的静态公共属性 
         * 
    @param className   类名 
         * 
    @param fieldName   属性名 
         * 
    @return 该属性对象 
         * 
    @throws Exception 
         
    */ 
        
    public Object getStaticProperty(String className, String fieldName){ 
         
    try { 
          Class ownerClass 
    = Class.forName(className); 
          Field field 
    = ownerClass.getField(fieldName); 
          Object property 
    = field.get(ownerClass); 
          
    return property; 
      } 
    catch (Exception e) { 
       e.printStackTrace(); 
      } 
      
    return null
        } 
         
    private boolean towStringEq(String str1,String str2) { 
      System.out.println(
    "str1:"+str1+"  str2:"+str2); 
      
    if (str1.equals(str2)) { 
       
    return true
      }
    else
       
    return false
      } 

    private void printValue(String []arr,int i) { 
      System.out.println(
    "i:"+i); 
      
    for (int j = 0; j < arr.length; j++) { 
       System.out.println(
    "arr["+j+"]:"+arr[j]); 
      } 
  • 相关阅读:
    git 使用规范
    备忘 Sim联合Python仿真接口
    HMM 隐马尔可夫模型 MATLAB
    Smoothed Zscore Algorithm 数据异常点算法
    服务器部署备忘
    关于string的indexof方法的试验
    关于命令模式的一些理解
    关于字符串效率问题
    随记一下 关于域用户的AD验证
    关于异步委托的部分理解
  • 原文地址:https://www.cnblogs.com/jifeng/p/2147714.html
Copyright © 2020-2023  润新知