搜索
首页Javajava教程Item 更喜欢接口而不是反射

Java 中的反射 (java.lang.reflect):
通过反思,有可能:

  • 以编程方式访问任意类的构造函数、方法和字段。
  • 以反射方式操作类及其成员(构造函数、方法、字段),允许您创建实例、调用方法和访问字段。
  • 即使类在编译期间不存在,也可以调用对象的方法。

反射的缺点:
编译时类型检查丢失:

  • 通常在编译时检测到的错误只会在运行时出现。
  • 示例:反射调用不存在或不可访问的方法可能会在运行时生成异常。

繁琐的代码:
反射需要更复杂且可读性较差的代码。
示例:

Method method = obj.getClass().getMethod("methodName");
method.invoke(obj, args);

表现不佳:

  • 反射方法调用比普通调用慢得多。
  • 示例:在某些场景下,反射可能比直接方法调用慢 11 倍。

反射的应用:

  • 用于代码分析工具、依赖注入框架和服务提供框架。
  • 即使在这些情况下,由于其缺点,也应尽可能避免。

有限使用反射:
建议技术:仅使用反射在编译时实例化未知类,并通过已知接口或超类引用这些实例。

示例:
创建 Set 实例的程序,由命令行指定:

Class extends Set<string>> cl = (Class extends Set<string>>) Class.forName(args[0]);
Constructor extends Set<string>> cons = cl.getDeclaredConstructor();
Set<string> s = cons.newInstance();
for (int i = 1; i 



<p><strong>示例中说明的缺点:</strong><br>
<strong>运行时异常:</strong></p>

<ul>
<li>该示例在运行时最多可以生成六个不同的异常。</li>
<li>如果不使用反射,这些异常将在编译时被捕获。</li>
</ul>

<p><strong>复杂性和冗长:</strong></p>

<ul>
<li>该示例需要 25 行代码才能从名称实例化一个类,而直接调用构造函数只需一行代码即可完成。</li>
</ul>

<p><strong>未经验证的演员警告:</strong></p>

<ul>
<li>在示例中,存在未检查强制转换的合法警告,因为命令行上指定的类可能不是 Set 的实现。</li>
</ul>

<p><strong>反射的合法使用:</strong></p>
<ul>
<li>动态依赖:当类、方法或字段在运行时可能不存在时。</li>
<li>示例:您可以使用反射来支持包的多个版本,而不会破坏向后兼容性。</li>
</ul>

<p>结论:<br>
反射很强大,但它也有很多缺点。<br>
只要有可能,仅使用反射来实例化对象并通过编译时已知的接口或超类访问它们。</p>

<p>书中的示例:<br>
<img src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/172981386629875.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="Item  Dê preferência às interfaces em vez da reflexão"></p>


          

            
        </string></string></string></string>

以上是Item 更喜欢接口而不是反射的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前By尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具