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
  • 相关阅读:
    监视和调整硬件性能
    ASP.NET MVC三个重要的描述对象:ActionDescriptor
    REST in Practice
    软硬件错误的排查之道
    OMCS 多媒体连接系统
    逻辑层 vs 物理层
    深入浅出裸测之道单元测试的单元化
    简单的网络爬虫实现
    WCF返回JSON与传入JSON(普通参数或对象)
    .NET程序员的一个礼物——TypeMonster
  • 原文地址:https://www.cnblogs.com/alsf/p/8727660.html
Copyright © 2011-2022 走看看