当前位置: 首页 > 知识库问答 >
问题:

Java9替换Class.new实例

长孙诚
2023-03-14

班Java 9中不推荐使用newInstance:

clazz.newInstance()

可替换为

clazz.getDeclaredConstructor().newInstance()

问题是getDeclaredConstructor返回任何构造函数,而不考虑访问级别。

如果我想替换代码中的所有引用(在不同的包/访问级别上),我应该使用getConstructor来获取公共构造函数吗?

与指定参数匹配的公共构造函数的构造函数对象类型

或者我不能批量替换所有发生的事件,因为它需要按大小写替换(如果存在公共构造函数和/或如果我有正确的类访问级别)?

编辑

getDeclaredConstructor:

   return getConstructor0(parameterTypes, Member.DECLARED);

getConstructor:

   return getConstructor0(parameterTypes, Member.PUBLIC);

共有1个答案

邬安邦
2023-03-14

这两个调用调用同一个构造函数,零参数构造函数:

  1. klass.new实例()
  2. klass.getDeclaredConstructor(). newInstance()

如果构造函数不是公共的,则两者都执行相同的运行时检查以验证调用方的访问。唯一的区别是#2包装所有已检查的异常,而不是直接抛出。否则,它们是相同的,您可以将其中一个替换为另一个。

但这是不同的:

因为它只能返回公共构造函数。如果构造函数不是公共的,它会抛出一个NoSuchMethodException。

因此,除非知道构造函数是公共的,否则不能将其更改为getConstructor()。

 类似资料:
  • 问题内容: 我刚刚完成了从数据库中剥离HTML实体的任务,因为我们进行了很多爬网,并且某些爬网程序在输入时没有这样做:( 因此,我开始编写一堆看起来像这样的查询; 显然,这是一种非常幼稚的方法。我一直在尝试找出解码功能是否可以做些聪明的事情。也许通过正则表达式抓住HTML实体一样,然后通过 刚刚 的部分到ASCII解码器,以及重建串…或东西… 我可以按查询继续吗?其中可能只有40个左右。 问题答案

  • 假设有一段文本里面有很多错误,如错别字。现在使用 Java 中的字符串替换方法对它进行批量修改和纠正,其中就用到了我们在《 Java字符串的替换》一节中学到的 String 类的 replace() 方法、replaceFirst() 方法和 replaceAll() 方法。 创建一个 Java 类,然后在主方法 main() 中编写代码,具体代码如下所示。 运行该程序,输出的正确字符串内容如下:

  • Git 对象是不可改变的,但它提供一种有趣的方式来用其他对象假装替换数据库中的 Git 对象。 replace 命令可以让你在 Git 中指定一个对象并可以声称“每次你遇到这个 Git 对象时,假装它是其他的东西”。 在你用一个不同的提交替换历史中的一个提交时,这会非常有用。 例如,你有一个大型的代码历史并想把自己的仓库分成一个短的历史和一个更大更长久的历史,短历史供新的开发者使用,后者给喜欢数据

  • 本文向大家介绍Python字符串替换实例分析,包括了Python字符串替换实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python字符串替换的方法。分享给大家供大家参考。具体如下: 单个字符替换 输出结果为:abcd 字符串替换,改善版 输出结果为:hello, i'm mr, hoho~~,hoho~~mrmr 希望本文所述对大家的Python程序设计有所帮助。

  • 我正在使用一些非常古老的。 我试图通过删除非字母字符(标点符号和数字等)来净化一些输入 通常我会做这样的事情: 然而,是在中引入的!所以它不会编译!http://docs.oracle.com/javase/7/docs/api/java/lang/string.html#ReplaceAll(java.lang.string,java.lang.string) 在之前,我们是如何做到这一点的?