栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用“ instanceof”运算符是否被认为是不良设计?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用“ instanceof”运算符是否被认为是不良设计?

该访问者模式通常在这样的情况下使用。尽管代码有些复杂,但是添加新的

RecordType
子类后,您
必须 在所有地方实现逻辑,否则它将无法编译。与
instanceof
所有的地方也很容易错过一个或两个地方。

例:

public abstract class RecordType {    public abstract <T> T accept(RecordTypeVisitor<T> visitor);}public interface RecordTypeVisitor<T> {    T visitOne(RecordType1 recordType);    T visitTwo(RecordType2 recordType);}public class RecordType1 extends RecordType {    public <T> T accept(RecordTypeVisitor<T> visitor) {        return visitor.visitOne(this);    }}public class RecordType2 extends RecordType {    public <T> T accept(RecordTypeVisitor<T> visitor) {        return visitor.visitTwo(this);    }}

用法(请注意通用返回类型):

String result = record.accept(new RecordTypeVisitor<String>() {    String visitOne(RecordType1 recordType) {        //processing of RecordType1        return "Jeden";    }    String visitTwo(RecordType2 recordType) {        //processing of RecordType2        return "Dwa";    }});

我也建议抛出一个异常:

throw new IllegalArgumentException(record);

而不是在

null
找不到这两种类型时返回。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486378.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号