Java 动态转换为子类以使用正确的方法重载
我正在努力使我的代码更加多态。现在我有一个超类,它有四个不同的子类。我有一个接受超类作为类型的方法。我想先执行一些常规操作,然后再将其路由到其他方法来处理其他操作。以下是我的设想:Java 动态转换为子类以使用正确的方法重载,java,inheritance,polymorphism,Java,Inheritance,Polymorphism,我正在努力使我的代码更加多态。现在我有一个超类,它有四个不同的子类。我有一个接受超类作为类型的方法。我想先执行一些常规操作,然后再将其路由到其他方法来处理其他操作。以下是我的设想: public void performSomething(Super object) { //do some generic action each time to object object.setSuperProperty(); //now route to appropriate m
public void performSomething(Super object) {
//do some generic action each time to object
object.setSuperProperty();
//now route to appropriate method to perform specific action
doSpecific(object);
}
private void doSpecific(SubA object) { }
private void doSpecific(SubB object) { }
private void doSpecific(SubC object) { }
private void doSpecific(SubD object) { }
这样,如果我想添加更多的功能——通过创建一个新的子类或其他什么——那么我只需要添加另一个具有正确子类类型的方法。但是,这是不可能的,因为编译器抱怨没有doSpecific(超级对象)
方法。相反,在performSomething(超级对象)
中,我必须执行一个丑陋的操作:
if(object instanceof SubA)
doSpecific((SubA)object);
else if(object instanceof SubB)
doSpecific((SubB)object);
...
有没有比必须执行所有instanceof
检查更好的方法?有没有一种设计模式是我没有想到的?我知道我将失去编译时类型检查的安全性,但我只是好奇还有什么其他的解决方案可能存在
编辑:忘了提这个了performSomething
和doSpecific
是我将调用ClassA
的不相关类的一部分。我考虑在超类中创建一个抽象方法,以便子类能够正确地实现它。问题在于,执行某项任务
和特定的
取决于类别a
的大约8个不同成员。因此,如果我想将方法委托给子类,它需要大量的参数,比如subB.doSpecific(int,int,String,String,Object,int,long,blah,blah)
我不确定它是否比原始的instanceOf
检查更好。这也将在ClassA
和我拥有的Super/Sub
类之间创建紧密耦合,因为我只需要从它们中读取值,这似乎不正确
这意味着:您的每个子类都实现了doSpecific()
方法。那么您的初始方法如下所示:
public void performSomething(Super object) {
//do some generic action each time to object
object.setSuperProperty();
//now route to appropriate method to perform specific action
object.doSpecific(...);
}
编译器会自动选择子类的方法-no
instanceOf
为您检查。Hmm,这只是在相关文档中弹出的,这很有趣,但似乎紧密耦合,必须公开为一个公共方法来调用:performSomething
和doSpecific
在哪里?关于docomon(Super s)
、代码重用和performSomething(SubA a)
、多态性?很抱歉,我应该在我的主要帖子中提到这一点。doSomething依赖的成员变量太多了。我必须通过8-9个参数这样做。