Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java反射的利弊?_Java_Reflection - Fatal编程技术网

Java反射的利弊?

Java反射的利弊?,java,reflection,Java,Reflection,今天我在看一些代码,我遇到了一段代码,使用反射来获取泛型对象,并根据类型对其执行不同的操作。我以前从未见过这样的事情,我想知道在java中使用反射的优点和缺点是什么?在java中没有反射的优点或缺点。这是一个工具,你应该在特定情况下使用。例如: 当您创建需要使用代码进行运行时操作的库时。 当您在没有源代码的情况下编译jar时,jar的作者犯了一个错误,并且没有公开正确的API。 所以基本上,你应该使用还是不使用反射,这是一个情况的问题。如果在99.99%的情况下不使用反射就可以完成任务,则不应使

今天我在看一些代码,我遇到了一段代码,使用反射来获取泛型对象,并根据类型对其执行不同的操作。我以前从未见过这样的事情,我想知道在java中使用反射的优点和缺点是什么?

在java中没有反射的优点或缺点。这是一个工具,你应该在特定情况下使用。例如:

当您创建需要使用代码进行运行时操作的库时。 当您在没有源代码的情况下编译jar时,jar的作者犯了一个错误,并且没有公开正确的API。
所以基本上,你应该使用还是不使用反射,这是一个情况的问题。如果在99.99%的情况下不使用反射就可以完成任务,则不应使用反射

UPD


你不能把它用在所有事情上吗?如果你真的是个大混蛋,你可以用它来调用你调用的每个方法,那么是什么阻止你这么做呢

主要是速度慢、代码不可维护、编译时代码检查丢失、封装中断

使用反射获取通用对象并对其执行不同的操作 它基于类型

一般来说,出于性能、清晰度和健壮性的考虑,这通常是一个坏主意

它抛弃了静态类型系统的优点;如果传入反射代码不处理的类型,则会出现运行时错误,而不是编译时错误。如果其中一个类更改了实现,例如重命名方法,那么在编译时也不会检测到

如果这些不同类型有一些共同点,那么通常最好使用多态性来处理:将公共性抽象到接口或抽象类中;然后,每个子类都可以实现它需要的特定行为,而无需其他代码使用反射插入内部


如果这些不同的类型没有任何共同之处,那么为什么要一起处理它们呢?

Con-速度很慢;它可以破坏封装;它易碎,容易破碎;很难在代码重构中包含什么示例?大家都知道反思很慢,当你开始使用它时,它是你首先学到的东西之一。在大多数情况下,您使用字符串元素来引用方法和字段,这意味着它很脆弱,很容易被破坏;它可以破坏封装,因为它允许您访问类的私有和受保护的字段和方法,这会使它不稳定。。。因为你不应该接触他们。别误会我的意思,它有优点,但你首先要小心缺点@Madelh程序员:我想说,缺点主要是违反了封装,反射不再那么慢了,它显然慢了,但JVM做了一些改进,提供了很好的响应时间。@AxelH是的,让我们打破封装8P-现在您可以将对象置于从未打算处于的未知状态。我是否使用反射,是的,是的,我使用了,我花了几个小时调试它,是的,是的,我有:P@AxelH我们显然不同意这一点;,但是要让API写得好。。。因为这总是发生;如果在99.99%的情况下不使用反射就可以完成任务,则不应使用反射。我甚至会说100%…但你不能把它用在所有事情上吗?比如,如果你真的是一个大混蛋,你可以用它来调用你调用的每个方法,那么是什么阻止你这么做呢?@SageSmith这么做真是一团糟,需要太多的样板代码才能让它正常工作,这不值得付出努力,而且,你突然失去了IDE的很多支持,因为它不能再告诉您方法名称或参数,这是一个很好的说法,我很懒;,更不用说,当事情出错时,它是一只需要调试的狗。你应该有充分的理由使用它it@SageSmith没有人阻止你。没有警察会袭击你的房子。“但我是故意这么做的——我只能想象这样做的原因是为了惹恼同事们。”潜水员们,我对你们的答案投了赞成票。我认为选择的答案有更好的解释,尽管很抱歉