首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何重写enum Flag子类的迭代行为?

重写enum Flag子类的迭代行为可以通过实现Iterable接口和重写iterator()方法来实现。下面是一个示例代码:

代码语言:txt
复制
public enum MyFlag {
    FLAG1(true),
    FLAG2(false),
    FLAG3(true);

    private boolean value;

    private MyFlag(boolean value) {
        this.value = value;
    }

    // 重写iterator()方法
    public static Iterator<MyFlag> iterator() {
        return new MyFlagIterator();
    }

    // 自定义迭代器类
    private static class MyFlagIterator implements Iterator<MyFlag> {
        private int index = 0;

        @Override
        public boolean hasNext() {
            return index < MyFlag.values().length;
        }

        @Override
        public MyFlag next() {
            return MyFlag.values()[index++];
        }
    }
}

在上面的示例代码中,我们重写了enum Flag子类的迭代行为。通过实现Iterable接口和重写iterator()方法,我们可以自定义迭代器的实现。在自定义迭代器类中,我们使用一个index变量来追踪当前迭代的位置,然后在hasNext()方法中判断是否还有下一个元素,在next()方法中返回当前元素并将迭代位置后移。

这样,我们就可以使用增强for循环或者显示调用迭代器的方式来遍历enum Flag子类的实例。

示例使用方法:

代码语言:txt
复制
for (MyFlag flag : MyFlag.values()) {
    System.out.println(flag);
}

输出结果:

代码语言:txt
复制
FLAG1
FLAG2
FLAG3

需要注意的是,enum是一种特殊的类,它的实例在定义时就已经确定,因此它的迭代行为默认是按照定义的顺序进行迭代的。如果需要改变迭代的顺序或者添加过滤条件等,可以在自定义迭代器类中进行实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java50个关键字总结

但是不能实例化,只能被子类继承。 如果子类不是抽象类,则必须重写父类抽象方法。 ...使用assert时不能在表达式中完成任何程序实际所需行为(只能做判断)。因为正常发布代码都是断言无效,即正常发布代码中断言语句都不不执行。 ...flag: for(...){     for(...){         break flag;     } } 5.byte  byte是Java基本类型之一(默认值0)。...修饰方法: 被final修饰方法不能被子类重写。修饰类: 被final修饰类不能被继承。  19.finally  finally在try/catch语句块中处理一些后续工作。...如果在try/catch中使用return,则finally会撤销这个return,无论如何都会执行finally中语句。

58400
  • Java50个关键字总结「建议收藏」

    但是不能实例化,只能被子类继承。 如果子类不是抽象类,则必须重写父类抽象方法。...使用assert时不能在表达式中完成任何程序实际所需行为(只能做判断)。因为正常发布代码都是断言无效,即正常发布代码中断言语句都不不执行。...flag: for(...){ for(...){ break flag; } } 5.byte byte是Java基本类型之一(默认值0)。...修饰方法: 被final修饰方法不能被子类重写。 修饰类: 被final修饰类不能被继承。 19.finally finally在try/catch语句块中处理一些后续工作。...如果在try/catch中使用return,则finally会撤销这个return,无论如何都会执行finally中语句。 20.float float是Java基本类型之一(默认值0.0f)。

    1K30

    Java50个关键字总结

    但是不能实例化,只能被子类继承。 如果子类不是抽象类,则必须重写父类抽象方法。 ...使用assert时不能在表达式中完成任何程序实际所需行为(只能做判断)。因为正常发布代码都是断言无效,即正常发布代码中断言语句都不不执行。 ...flag: for(...){     for(...){         break flag;     } } 5.byte  byte是Java基本类型之一(默认值0)。...修饰方法: 被final修饰方法不能被子类重写。修饰类: 被final修饰类不能被继承。  19.finally  finally在try/catch语句块中处理一些后续工作。...如果在try/catch中使用return,则finally会撤销这个return,无论如何都会执行finally中语句。

    62400

    Java50个关键字总结

    但是不能实例化,只能被子类继承。 如果子类不是抽象类,则必须重写父类抽象方法。 ...使用assert时不能在表达式中完成任何程序实际所需行为(只能做判断)。因为正常发布代码都是断言无效,即正常发布代码中断言语句都不不执行。 ...flag: for(...){     for(...){         break flag;     } } 5.byte  byte是Java基本类型之一(默认值0)。...修饰方法: 被final修饰方法不能被子类重写。修饰类: 被final修饰类不能被继承。  19.finally  finally在try/catch语句块中处理一些后续工作。...如果在try/catch中使用return,则finally会撤销这个return,无论如何都会执行finally中语句。

    58400

    《Effective C++》读书摘要

    二、const、enum、inline替换#define const:代替宏变量有助于编译器理解; enumenum hack,更像define,不消耗内存,无法取地址; inline:宏函数尽量用inline...(六)、继承与面向对象设计 三十二、确定public继承塑膜出is-a关系 适用于基类事情也适用于子类。 三十三、避免遮掩继承来名称 基类重载函数一旦在子类重写后,其他同名函数无法访问。...三十九、审慎使用private继承 私有继承表达是实现关系,子类使用父类提供接口,但是不继承; 能用复合不用私有继承; 如何实现final字段: ?...这样Widget子类就不会修改onTick函数了,将内部类移出,换做声明可以降低耦合; private继承空基类大小实际为0,一般对象大小不能为0; 需要基类protected成员或者重写虚函数时候可以考虑使用...(八)、定制new和delete 四十九、new-handler行为 set_new_handler指定内存分配失败时调用函数。

    1.9K60

    Java高级编程精华笔记

    子类可以扩展自己属性、方法。 子类可以覆盖父类方法,用自己方式实现。 也就是,你是我,我还是我,我还可以改变你。...如果修饰方法,则表示方法不能被子类重写重写与重载 重写与重载区别可以通过下面这张图来看: 重写就是子类覆盖父类,方法名和参数都一样: 重载就是在一个类里面的多个方法,方法名相同,参数不同。...调用时根据入参匹配到不同方法: 多态 多态是同一个行为具有多个不同表现形式或形态能力。...重写可以看做是父类和子类之间多态性一种表现(重载可以理解成多态具体表现形式),如图所示: class Shape { void draw() {} } class Circle extends...抽象方法最终必须被重写了才能在实例化对象中使用。如果一个类继承了带有抽象方法抽象类,那么这个类要么也是抽象类,要么就必须重写抽象方法。 接口 接口不是类,它们属于不同概念。

    1.1K20

    62道Java核心面试题,这次全了

    接口是对类某种行为一种抽象,接口和类之间并没有很强关联关系,所有的类都可以实现 Serializable 接口,从而具有序列化功能。 34、一个接口可以实现或者继承另外一个接口吗?...enum(枚举)是 Java 1.5 时引入关键字,它表示一种特殊类型类,默认继承自 java.lang.Enum。...缺点:创建整体类对象时,需要创建所有局部类对象 优点:创建子类对象时,无须创建父类对象 42、如何在 Java 中对自定义对象集合进行排序?...当在子类重写了父类方法时,可以通过 super 关键字访问父类方法。 也可以使用 super 关键字在子类构造方法中调用父类构造方法,它必须是构造方法中第一条语句。...我们可以使用 continue 关键字在 for、while、do-while 循环跳过当前迭代;甚至可以使用带有标签 continue 语句来跳过最外层循环的当前迭代

    63520

    C# 中“智能枚举”:如何在枚举中增加行为

    枚举常见设计模式运用 enum 可以应用在许多种设计模式下: 状态模式 策略模式 工厂模式 观察者模式 介绍 状态模式 状态模式用于根据对象内部状态来改变其行为。...策略模式 策略模式允许您根据运行时条件选择不同算法或行为enum 可以很好地表示这些条件,因此它是实现策略模式常见选择。...在 C# 中,您可以使用 switch 语句或 if-else 语句来根据不同 enum 值选择不同算法或行为。 工厂模式 工厂模式允许您使用一个共同接口来创建不同对象。...这种带行为一种枚举,简单可以定义为:智能枚举 = 枚举 + 丰富行为。 它由原来 enum 类型(值类型)改变成了 class 类型(引用类型),允许您将行为和方法绑定到每个枚举类型上。...每个子类重写了父类 CreditCard 中 Discount 属性,以表示不同信用卡折扣率。GoldCreditCard 有最高折扣率,NoneCreditCard 没有任何折扣。

    29320

    C#“智能枚举”:在枚举中增加行为

    枚举常见设计模式运用 enum 可以应用在许多种设计模式下: 状态模式 策略模式 工厂模式 观察者模式 介绍 状态模式 状态模式用于根据对象内部状态来改变其行为。...策略模式 策略模式允许您根据运行时条件选择不同算法或行为enum 可以很好地表示这些条件,因此它是实现策略模式常见选择。...在 C# 中,您可以使用 switch 语句或 if-else 语句来根据不同 enum 值选择不同算法或行为。 工厂模式 工厂模式允许您使用一个共同接口来创建不同对象。...这种带行为一种枚举,简单可以定义为:智能枚举 = 枚举 + 丰富行为。 它由原来 enum 类型(值类型)改变成了 class 类型(引用类型),允许您将行为和方法绑定到每个枚举类型上。...每个子类重写了父类 CreditCard 中 Discount 属性,以表示不同信用卡折扣率。GoldCreditCard 有最高折扣率,NoneCreditCard 没有任何折扣。

    36020

    刚才,我发现了Python强大内置模块collections

    :类似于 list 容器,可以快速在队列头部和尾部添加、删除元素; OrderedDict:dict子类,可以记住元素添加顺序; defaultdict:dict子类,可以调用提供默认值函数...; Counter:dict子类,计算可hash对象; 2....)) #通过这里判定我们就可以知晓它是元组类型 print(flag.x,flag.y,flag.z) (2). testDeque函数 deque是栈和队列一种广义实现,deque是 "...函数 defaultdict是内置数据类型 dict 一个子类,基本功能与 dict 一样,只是重写了一个方法__missing__(key)和增加了一个可写对象变量 default_factory...testDefaultdict(): dict1= defaultdict(lambda: 'default') #Key不存在时,返回一个默认值,就可以用default,defaultdict其他行为

    28210

    “面试不败计划”: java语言基础面试题(一)

    1、面向对象三个特征 封装,继承,多态.这个应该是人人皆知.有时候也会加上抽象. 2、多态好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象不同而采用多种不同行为方式(发送消息就是函数调用...可扩充性:增加新子类不影响已经存在类结构. 接口性:多态是超类通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现. 灵活性....简化性. 3、代码中如何实现多态 实现多态主要有以下三种方式: 接口实现 继承父类重写方法 同一类中进行方法重载 4、虚拟机是如何实现多态 动态绑定技术(dynamic binding),执行期间判断所引用对象实际类型.... 8、父类静态方法能否被子类重写 不能.重写只适用于实例方法,不能用于静态方法,而子类当中含有和父类相同签名静态方法,我们一般称之为隐藏. 9、什么是不可变对象 不可变对象指对象一旦被创建,状态就不能再改变...,char,int或者其对应封装类以及Enum类型。

    50540

    Effective Java(第三版)-学习笔记

    3.父类重写equals方法已经合适使用了,就不需要子类重写。如AbstractMap。...继承设计和文档说明 1.如果子类重写父类方法,应写明方法签名相关信息和调用者信息等。 2.慎重在protected方法中留有hook,可能子类并不能处理好。...Chapter06:枚举和注解 使用枚举代替数字常量 枚举类是继承Enum类实现,枚举对象是public static final定义(枚举对象可以是枚举类子类实现)。...5.使用两个元素枚举类型作为对象,而不是boolean参数。前者方便扩展。 慎重使用重载 重载方法的确定是在编译期,重写方法的确定是在运行期,所以会选择子类重写方法。...保守实现readObject方法 其实还是降低安全风险等问题,如变量完整校验,不要将序列化方法重写,交给子类不可控等问题。

    1.1K10

    业务代码中“if-else”太多被吐槽,使用状态模式优雅推动业务生命周期流转

    以上这种变动可能会修改多个地方代码,测试同学就不得不进行大面积回归测试,上线风险会大大增加;而我们开发同学这种新逻辑上线就硬改原有代码行为,违背了开闭原则,随着业务迭代,项目代码可读性会越来越差...也就是说当我们设计一个模块,一个实体对象时,应该在不修改自身源代码情况下,能够扩展新行为。以上这句话读完,不能修改和能够扩展是自相矛盾如何才能实现并满足开闭原则呢?...这就考验我们在对象设计时要做到敏锐性和合理性,及时发现关键领域中具有相同行为对象,使用抽象类或者接口,将相同行为抽象到抽象类或者接口中,将不同行为封装到子类实现类上面。...这样处理之后,系统需要扩展功能时,我们只要扩展新子类就可以。对于子类修改我们也可以重新实现一个新子类。...具体状态ConcreteState角色:是State子类实现类,具体状态子类,每一个子类都封装了一个ConcreteState相关行为

    30720

    Python升级之路( Lv7 ) 面向对象深入

    多态出现也符合面向对象"开闭原则" 封装之所以没讲是因为我们经常会用到, 因为在我们日常编程中, 将一些具有特定功能代码块封装成方法/函数这种行为正体现了封装思想 然后学习了深拷贝和浅拷贝:...Python追求简洁语法,没有严格语法级别的“访问控制符”,更多是依靠程序员自觉实现 多态是指同一个方法调用由于对象不同会产生不同行为 例如: 同样是休息方法,人不同休息方法不同: 张三休息是睡觉...也就是说 object 是所有类父类,里面定义了一些所有类共有的默认实现,比如: __new__() 等 关于构造函数: 子类重写 __init__ 时,实例化子类,会自动调用父类定义 __init...子类重写了 __init__ 时,实例化子类,就不会调用父类已经定义 __init__ 如果重写了 __init__ 时,要使用父类构造方法,可以使用 super 关键字,也可以使用如下格式调用:...子类重写了 __init__ 时,实例化子类,就不会调用父类已经定义 __init__ 如果重写了 __init__ 时,要使用父类构造方法,可以使用 super 关键字,也可以使用如下格式调用

    45810

    模板方法模式(Template Method Pattern)

    模板方法使得子类可以不改变一个算法结构即可重定义该算法某些特定步骤。 —— 《设计模式:可复用面向对象软件基础》 模板方法模式是类行为模式。...准备一个抽象类,将部分逻辑以具体方法以及具体构造函数形式实现,然后声明一些抽象方法来迫使子类实现剩余逻辑。不同子类可以以不同方式实现这些抽象方法,从而对剩余逻辑有不同实现。...这个模板方法一般是一个具体方法,它给出了一个顶级逻辑骨架,而逻辑组成步骤在相应抽象操作(step1、step2)中,推迟到子类实现。...在不同类之间有复制粘贴代码(私有函数) 当你大多数类具有相关行为时,你可以使用此模式 实例:Spring JdbcTemplate,将一个公共方法封装起来,设置数据源(setDataSoure)、获取会话...(getSession)、关闭会话(closeSession)等,当然具体查询方法也实现了,如果你想重写也是可以

    30830

    《Kotin 极简教程》第7章 面向对象编程(OOP)(1)第7章 面向对象编程(OOP)《Kotlin极简教程》正式上架:

    但是,不论计算机能给我们如何多变、如何完美、如何复杂画面,其本源只是简单“0”和“1”。“0”和“1”在计算机中通过不同组合与再组合,模拟出一个纷繁复杂、包罗万象虚拟世界。...如果为了理解一个对象如何与其他对象进行复合,当你发现不得不深入挖掘对象实现之时,此时你所用编程范式原本优势就荡然无存了。...概念上区别 接口主要是对动作抽象,定义了行为特性规约。...抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。 继承是 is a关系,而 接口实现则是 has a 关系。...如果一个类继承了某个抽象类,则子类必定是抽象类种类,而接口实现就不需要有这层类型关系。 设计层面不同,抽象类作为很多子类父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。

    1.1K20

    【趣学程序】java面向对象(三)

    抽象类 当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类行为方式,那么这些方法都有具体方法体。...但是有的时候,某个父类只是知道子类应该包含怎么样方法,但是无法准确知道子类如何实现这些方法。...抽象类不能创建实例对象(不能new) 需要子类重写所有的抽象方法后才可以创建子类对象,否则子类也必须作为抽象类 abstract class Person{} class Student extends...,子类在抽象类基础上进行拓展,但是子类在总体上大致保留抽象类行为方式; 编写一个抽象父类,该父类提供了多个子类通用方法,并把一个或多个抽象方法留给子类去实现,这就是模板设计模式; 模板模式应用简单规则...;接口只能包含抽象方法; 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java单继承) 二者选用: 优先选用接口,尽量少用抽象类; 需要定义子类行为,又要为子类提供共性功能时才选用抽象类

    53640
    领券