为了账号安全,请及时绑定邮箱和手机立即绑定

Java和正确使用类层次结构

Java和正确使用类层次结构

蝴蝶刀刀 2021-05-14 15:01:12
TypeEnum    MATERIAL,    OPERATION,    SIGNATURE;class AbstractModule    TypeEnum typeEnum    String name    String colorclass MaterialModule extends AbstractModule    some properties unique to this moduleclass OperationModule extends AbstractModule    some properties unique to this moduleclass SignatureModule extends AbstractModule    someProperties unique to this module在某些时候,很多xxxModule被制作并存储在AbstractModule列表中。然后稍后迭代所有列表,并使用一个切换用例将抽象模块投射回其子类并进行处理switch (module.getTypeEnum) {            case MATERIAL:                MaterialModule materialModule = (MaterialModule) module;                //do stuff with materialModule unique property                break;            case OPERATION:                OperationModule operationModule = (OperationModule) module;                //do stuff with operationModule unique property                break;            case SIGNATURE:                SignatureModule signatureModule = (SignatureModule) module;                //do stuff with signature module unique property                break;每个“使用模块唯一属性执行操作”应该在每个子类的方法中这样,您可以只调用module.doModuleStuff()而不进行切换,这是不行的,因为我仍然需要为此将其强制转换回其子类。问题是,如果将此代码放在每个子类中,当我的列表包含AbstractModules时如何调用正确的方法?我的意思是没有这个typeEnum和switch的情况。
查看完整描述

1 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

您可以创建一个公共方法,该方法将使用所需的唯一属性调用私有方法。例如 :


public abstract class AbsModule{

    public void abstract doSomething();

}


public class Module1 implements AbsModule{

    public void doSomething(){

        doSomethingForModule1();

    }

    private void doSomethingForModule1(){

        Your code here

    }

}


public class Module2 implements AbsModule{

    public void doSomething(){

        doSomethingForModule2();

    }

    private void doSomethingForModule2(){

        Your code here

    }

}

您还可以检查可以完成工作的设计模式。


查看完整回答
反对 回复 2021-05-19

添加回答

代码语言

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号