zoukankan      html  css  js  c++  java
  • newInstance() 的参数版本与无参数版本

    通过反射创建新的类示例,有两种方式: 
    Class.newInstance() 
    Constructor.newInstance() 

    以下对两种调用方式给以比较说明: 
    Class.newInstance() 只能够调用无参的构造函数,即默认的构造函数; 
    Constructor.newInstance() 可以根据传入的参数,调用任意构造构造函数。 

    Class.newInstance() 要求被调用的构造函数是可见的,也即必须是public类型的
    Constructor.newInstance() 在特定的情况下,可以调用私有的构造函数,需要通过setAccessible(true)实现。

    下面是两种方式:

    package com.reflect;
    import java.lang.reflect.Constructor;
    
    class TestB
    {
        public  TestB()
        {
            System.out.println("Test A");
        }
        //设置构造方法私有
        private TestB(int a,String b)
        {
            System.out.println("Test parames");
        }
    }
    public class Test {
        
        public static void main(String []args) throws Exception
        {
            Test b=new Test();
            Class c=Class.forName("com.reflect.TestB");
            //无参数
            TestB b1=(TestB) c.newInstance();
            //有参数需要使用Constructor类对象
            //这种方式和下面这种方式都行,注意这里的参数类型是 new Class[]
            //Constructor ct=c.getDeclaredConstructor(int.class,String.class);
            Constructor ct=c.getDeclaredConstructor(new Class[]{int.class,String.class});
            ct.setAccessible(true);
            //这种方式和下面这种方式都可以:注意这里的参数类型是 new Object[]
            //TestB b2=(TestB) ct.newInstance(1,"2");
            TestB b2=(TestB) ct.newInstance(new Object[] {1,"2"});
        }
    }

    运行结果:

    Test A
    Test parames
  • 相关阅读:
    appium---纯web app测试
    appium---元素定位工具
    appium---[ADB] Killing adb server on port 5037报错
    pytest---自定义用例识别规则
    pytest---用例执行顺序
    解决Could not find function xmlCheckVersion in library libxml2问题
    pytest---测试框架初探
    layoutSubviews何时被调用
    'addTimeInterval:' is deprecated: first deprecated in iOS 4.0
    iOS7 表格separatorInset的处理
  • 原文地址:https://www.cnblogs.com/alsf/p/8727660.html
Copyright © 2011-2022 走看看