其他分享
首页 > 其他分享> > 反射-class.newInstance() 被弃用

反射-class.newInstance() 被弃用

作者:互联网

反射-class.newInstance() 被弃用

1. class.newInstance()使用

1.1. 调用无参构造方法

//通过反射生成:AccountServiceImpl对象
    public IAccountService getInstance(){
        AccountServiceImpl accountService = null;
        try{
            accountService = (AccountServiceImpl)Class.forName("com.itlearn.service.impl.AccountServiceImpl").newInstance();
        }catch (Exception ex ){
            ex.printStackTrace();
        }
        return  accountService;
    }

注:class.newInstance() 会直接调用该类的无参构造函数进行实例化

1.2. 调用有参构造方法

//通过反射生成:AccountServiceImpl对象
    public IAccountService getInstence(){
        AccountServiceImpl accountService = null;
        try{
            accountService = (AccountServiceImpl)Class.forName("com.itlearn.service.impl.AccountServiceImpl").getConstructor(String.class,Integer.class).newInstance("heihei",12);
        }catch (Exception ex ){
            ex.printStackTrace();
        }
        return  accountService;
    }

注:getConstructor()会获得对于有参构造器,进行传入字节码。

2. class.newInstance()替代者

2.1. class.getDeclaredConstructor().newInstance()

//通过反射生成:AccountServiceImpl对象
    public IAccountService getInstence(){
        AccountServiceImpl accountService = null;
        try{
            accountService = AccountServiceImpl.class.getDeclaredConstructor(String.class,Integer.class).newInstance("heihei",12);
        }catch (Exception ex ){
            ex.printStackTrace();
        }
        return  accountService;
    }

注:getDeclaredConstructor()方法会根据他的参数对该类的构造函数进行搜索并返回对应的构造函数,没有参数就返回该类的无参构造函数,然后再通过newInstance进行实例化。

标签:弃用,newInstance,accountService,AccountServiceImpl,ex,class,构造函数
来源: https://blog.csdn.net/qq_42278320/article/details/115168067