Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop_Architecture_Refactoring - Fatal编程技术网

Java 被认为是有害的吗?

Java 被认为是有害的吗?,java,oop,architecture,refactoring,Java,Oop,Architecture,Refactoring,我正在查看一些大量使用Java的instanceof操作符的代码。我将抵制深入细节的诱惑,因为这是一个一般性问题instanceof让我想起了c++的动态转换,以及我很久以前读到的关于它的建议,如果你认为你需要它,可能你的模型已经关闭了。这仍然是传统智慧吗?它是否适用于Java的实例 是的,你在正确的轨道上。虽然instanceof肯定有它的用途,但大量使用通常表明您的类设计有缺陷。在Java中,泛型可以/应该用于减少instanceof关键字的数量。这样,只需要检查编译时不知道的少数代码。这就

我正在查看一些大量使用Java的
instanceof
操作符的代码。我将抵制深入细节的诱惑,因为这是一个一般性问题
instanceof
让我想起了c++的动态转换,以及我很久以前读到的关于它的建议,如果你认为你需要它,可能你的模型已经关闭了。这仍然是传统智慧吗?它是否适用于Java的
实例

是的,你在正确的轨道上。虽然
instanceof
肯定有它的用途,但大量使用通常表明您的类设计有缺陷。

在Java中,泛型可以/应该用于减少
instanceof
关键字的数量。这样,只需要检查编译时不知道的少数代码。这就是说,
instanceof
不像
goto
——它不会让您的控制流太混乱(尽管如果您不小心,它会引入许多额外的变量)


我经常使用<代码>实例,但是如果有很多,那么我会考虑代码的味道。诀窍是想出更好的办法;如果可以,那么使用

instanceof
可能是错误的。我不知道有哪种方案可以判断通用案例的使用是好是坏。
instanceof
之后的演员阵容可能比关键词本身更伤脑筋。

谁否决了这一点?这正是正确的答案。如果您必须使用大量的
实例,我会认为您的信息流存在缺陷。通常,代码的任何给定部分都不需要询问传递的是什么类。例外情况当然是可能的,而且很多。InstanceOf在某种程度上是一种反射功能,必须小心使用反射。如果不解释为什么使用
InstanceOf
表示设计缺陷,这个答案是不完整的。我参加了一个关于编程语言的课程,该课程坚持认为
InstanceOf
的使用根本不是面向对象的。就我个人而言,我不会马上把任何语言特征称为邪恶,或者说它永远不应该被使用。是的,即使是去。相反,我认为当你看到某些模式时,它们应该会脱颖而出,比如一个有很多闪烁标签的老geocities网站,然后对程序员说“你最好准备好捍卫这个选择”。这些情况中的实例是否经常发生,或者在某些情况下这是很自然的?我认为这就像我想到反射一样——过度使用可能不好,建议考虑重新设计,但在某些情况下,你无法避免使用它。实际上,可能是重复的,instanceof在equals方法中使用通常是错误的,因为您可以创建错误的equals方法。equals的最佳默认值是使用
(getClass()==o.getClass())
。只有当你真的需要支持多个“相等”的类型时才使用instanceof。@jtahlborn:这是一个很好的观点,一定是被许多使用
instanceof
的equals()方法洗脑了。删除了答案的最后一部分。是的。不幸的是,这是默认实现,通常用作简单示例或由IDE生成。@jtalborn,insteresting,但我想了解为什么getClass()比instanceOf更好。你能解释一下原因吗?@ejaenv-很难在评论中描述,请参阅本文以获得详尽的答案: