Java中对象类型的继承和识别
好的,我正在处理一个抽象类a的项目。假设类a1、a2和a3都继承自类a,并带有一些附加的方法,这些方法可能对每个子类都是唯一的。现在,这些对象可以作为用户交互的结果与其他对象配对,但只有某些类型的对象可以配对,即对象B只能使用a1,对象C只能使用a2,用户尝试以其他方式将它们配对会导致告诉它们不能配对。我当然希望避免这种情况,因为这在很大程度上是一种不好的做法,但我认为我目前有一个相当严重的脑胀气病例。我曾想过在父类中添加一个getType()或类似的方法,以返回每个子类唯一的字符串,但这让人觉得很老套。获取类名的感觉也差不多。我对我的OO和多态性原则有点生疏,所以欢迎提出建议。我正在考虑一个解决方案,在这个案例中使用泛型 要做到这一点,您需要定义一个类来存储两个值 类对Java中对象类型的继承和识别,java,inheritance,polymorphism,subclass,abstract,Java,Inheritance,Polymorphism,Subclass,Abstract,好的,我正在处理一个抽象类a的项目。假设类a1、a2和a3都继承自类a,并带有一些附加的方法,这些方法可能对每个子类都是唯一的。现在,这些对象可以作为用户交互的结果与其他对象配对,但只有某些类型的对象可以配对,即对象B只能使用a1,对象C只能使用a2,用户尝试以其他方式将它们配对会导致告诉它们不能配对。我当然希望避免这种情况,因为这在很大程度上是一种不好的做法,但我认为我目前有一个相当严重的脑胀气病例。我曾想过在父类中添加一个getType()或类似的方法,以返回每个子类唯一的字符串,但这让人觉
请注意,在大规模情况下,这将是一个糟糕的解决方案。如果您确实设置为不使用instanceof,并且无论出于何种原因,您都无法为instance类之外的配对定义参数,请在抽象类中添加一组新方法,这些方法可以执行以下两项操作之一: a) 方法worksWithTypeB、worksWithTypeC等等,根据需要在子类中定义它们。然而,这很像打字检查 b) 将类型b和C将使用的方法转移到抽象类;通常在B和C可以使用的类中定义它们(比如说,类型B使用a1.methodB,类型C使用a2.methodC),但是定义它们是为了在方法中引发一个异常,否则该异常将不存在(因此a1.methodC引发一个异常,a2.methodB也是如此)
尽管正如ilcavero所说,在这种情况下,类型检查并没有什么问题。我认为在这种情况下使用instanceof没有任何问题,当您在运行时使用instanceof检查类型时,如果您应该在编译时检查类型,则认为这是一种不好的做法,但您说是用户来进行配对(因此运行时操作)因此instanceof似乎是一个不错的选择