反射-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进行实例化。

上一篇:再见了,我的散装研发管理平台;再见了,4台ECS!


下一篇:Android中Fragment的基本使用