clazz.getDeclaredConstructor().newInstance()

img

img


同样的套路,同一段代码,第一张图片里怎么是4个null啊,结果应该像第二张图片那样才对,网上也没搜到怎么解决。

第一张图的 反射对象是

img


第二张图的 反射对象是

img

这说明 你 这个clazz 对象就不一样吧, 你看看 clazz是啥

  • 你看下这篇博客吧, 应该有用👉 :java clazz.getDeclaredConstructor().newInstance() 方法和 class.newInstance() 方法实例化对象的区别
  • 除此之外, 这篇博客: 反射-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进行实例化。