Java的实例可以区分功能相同的类吗?

时间:2016-08-24 13:40:08

标签: java instanceof

因此,假设我有两个几乎相同的类,但它们代表具有关键差异的对象。目前,这些差异并未真正实施。

例如,一个类,我们称之为MorningShiftWorker,具有完全相同的方法和相同的构造函数,我们称之为EveningShiftWorker。这两个对象都存储在其超类型ShiftWorker的列表中。

从逻辑上讲,将这两个组分开是有意义的,但不是在混合中添加其他变量,我想我只是使用ShiftWorker检查instanceof列表中的对象。

我的问题是:instanceof是否足够聪明,可以将苹果与橙子区分开来?这两个类目前在名称上相同。这对于instanceof是否足以让他们分开,或者我还有其他方式可以解决这个问题吗?

4 个答案:

答案 0 :(得分:3)

instanceof运算符不会比较类的内容。它非常清楚x是否为y的实例,即使xy是除了名称之外的相同类。

它只检查第一个参数是否在第二个参数的继承层次结构中,即一切都是instanceof ObjectIntegerFloat,其朋友是instanceof Number和当然x instanceof y适用于x类型的所有对象y

答案 1 :(得分:3)

是的,instanceof基本上检查对象是否可以正确地转换为给定的类。假设我们有这些类:

public class Fruit {}
public class Orange extends Fruit {}
public class Apple extends Fruit {}

然后在某种方法中我们尝试:

Fruit f = new Apple();
boolean isOrange = f instanceof Orange; //False

这也适用于空/非功能接口。

答案 2 :(得分:2)

你问的是错误的问题。你应该问:“我该如何修复破碎的设计”。

如果您必须使用“几乎”相同的类,但在其方法和构造函数中共享“重复”代码;然后你正在做一些错误的

从不重复代码。

所以,而不是担心instanceof;您应该退后一步并重新设计您的类层次结构,以找到最终如何最终实现常见事物的常见实现;所以你的早晚变换器只包含“那些不同的方面”。

您可能想查看Robert Martin的“敏捷原则”。那本书包含了一个关于“支付系统”的真实世界的例子;并详细解释了如何创建一个系统,在这个系统中,您拥有以非常不同的模式付费的员工 - 而不会在所有地方重复使用。 (您甚至可以在互联网上免费找到PDF格式的“C#”版本)。

答案 3 :(得分:0)

是的,实例是"智能"因为java使用name来区分对象/类而不是结构

相关问题