Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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_Inheritance_Polymorphism_Subclass_Abstract - Fatal编程技术网

Java中对象类型的继承和识别

Java中对象类型的继承和识别,java,inheritance,polymorphism,subclass,abstract,Java,Inheritance,Polymorphism,Subclass,Abstract,好的,我正在处理一个抽象类a的项目。假设类a1、a2和a3都继承自类a,并带有一些附加的方法,这些方法可能对每个子类都是唯一的。现在,这些对象可以作为用户交互的结果与其他对象配对,但只有某些类型的对象可以配对,即对象B只能使用a1,对象C只能使用a2,用户尝试以其他方式将它们配对会导致告诉它们不能配对。我当然希望避免这种情况,因为这在很大程度上是一种不好的做法,但我认为我目前有一个相当严重的脑胀气病例。我曾想过在父类中添加一个getType()或类似的方法,以返回每个子类唯一的字符串,但这让人觉

好的,我正在处理一个抽象类a的项目。假设类a1、a2和a3都继承自类a,并带有一些附加的方法,这些方法可能对每个子类都是唯一的。现在,这些对象可以作为用户交互的结果与其他对象配对,但只有某些类型的对象可以配对,即对象B只能使用a1,对象C只能使用a2,用户尝试以其他方式将它们配对会导致告诉它们不能配对。我当然希望避免这种情况,因为这在很大程度上是一种不好的做法,但我认为我目前有一个相当严重的脑胀气病例。我曾想过在父类中添加一个getType()或类似的方法,以返回每个子类唯一的字符串,但这让人觉得很老套。获取类名的感觉也差不多。我对我的OO和多态性原则有点生疏,所以欢迎提出建议。

我正在考虑一个解决方案,在这个案例中使用泛型

要做到这一点,您需要定义一个类来存储两个值

类对

现在,您将向hashmap添加所有类型的对。当需要该类型的一对时,您可以通过其名称获取该对

缺点:

您必须将所有想要的对添加到容器中

你必须把一对和一个名字联系起来


请注意,在大规模情况下,这将是一个糟糕的解决方案。

如果您确实设置为不使用instanceof,并且无论出于何种原因,您都无法为instance类之外的配对定义参数,请在抽象类中添加一组新方法,这些方法可以执行以下两项操作之一:

a) 方法worksWithTypeB、worksWithTypeC等等,根据需要在子类中定义它们。然而,这很像打字检查

b) 将类型b和C将使用的方法转移到抽象类;通常在B和C可以使用的类中定义它们(比如说,类型B使用a1.methodB,类型C使用a2.methodC),但是定义它们是为了在方法中引发一个异常,否则该异常将不存在(因此a1.methodC引发一个异常,a2.methodB也是如此)


尽管正如ilcavero所说,在这种情况下,类型检查并没有什么问题。

我认为在这种情况下使用instanceof没有任何问题,当您在运行时使用instanceof检查类型时,如果您应该在编译时检查类型,则认为这是一种不好的做法,但您说是用户来进行配对(因此运行时操作)因此instanceof似乎是一个不错的选择