当前位置: 首页 > 面试题库 >

如何启用枚举继承

方坚壁
2023-03-14
问题内容

我正在编写一个库,该库具有一组预定义的枚举值。可以说,我的枚举如下所示。

public enum EnumClass {
    FIRST("first"),
    SECOND("second"),
    THIRD("third");

    private String httpMethodType;

}

现在,使用此库的客户端可能需要添加更多值。假设客户需要添加CUSTOM_FIRSTCUSTOM_SECOND。这不会覆盖任何现有值,而是使枚举具有5个值。

在此之后,我应该能够使用<? extends EnumClass>5种不变的可能性。

实现此目标的最佳方法是什么?


问题答案:

您不能具有另一个enum扩展enum,也enum不能通过继承将值“添加”到现有值。

但是,enum可以实现interface

我要做的是让原始enum实现标记interface(即没有方法声明),然后您的客户端可以创建自己的enum实现interface

然后,您的enum价值观将被他们的共同点所引用interface

为了加强要求,您可以让介面宣告相关的方法,例如在您的情况下,在的行中public String getHTTPMethodType();

这将强制实现enums提供该方法的实现。

此设置加上适当的API文档应有助于以相对受控的方式添加功能

独立的示例 (不要介意这里的懒惰名称)

package test;

import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        List<HTTPMethodConvertible> blah = new ArrayList<>();
        blah.add(LibraryEnum.FIRST);
        blah.add(ClientEnum.BLABLABLA);
        for (HTTPMethodConvertible element: blah) {
            System.out.println(element.getHTTPMethodType());
        }
    }

    static interface HTTPMethodConvertible {
        public String getHTTPMethodType();
    }
    static enum LibraryEnum implements HTTPMethodConvertible {
        FIRST("first"),
        SECOND("second"),
        THIRD("third");
        String httpMethodType;
        LibraryEnum(String s) {
            httpMethodType = s;
        }
        public String getHTTPMethodType() {
            return httpMethodType;
        }
    }
    static enum ClientEnum implements HTTPMethodConvertible {
        FOO("GET"),BAR("PUT"),BLAH("OPTIONS"),MEH("DELETE"),BLABLABLA("POST");
        String httpMethodType;
        ClientEnum(String s){
            httpMethodType = s;
        }
        public String getHTTPMethodType() {
            return httpMethodType;
        }
    }
}

输出量

first
POST


 类似资料:
  • 问题内容: 为什么Java中的枚举不能从其他枚举继承?为什么以这种方式实施? 问题答案: 例子 因为将元素添加到枚举将有效地创建超类,而不是子类。 考虑: 这与常规类的工作方式相反。我想可以以这种方式实施,但实施起来比看起来要复杂得多,而且肯定会使人们感到困惑。

  • 问题内容: 您可以在Swift中继承枚举吗?关于枚举继承,应该注意哪些规则? 以下测试代码: 产生 问题答案: 在Swift语言中,我们有Structs,Enum和Classs。Struct和Enum通过副本传递,而类通过引用传递。只有类支持继承,枚举和结构不支持。 因此,要回答您的问题,您不能继承Enum(和Struct类型)。在这里看看:

  • 你能在Swift中继承枚举吗?关于枚举继承,应该知道哪些规则? 以下测试代码: 产生

  • 问题内容: 例如,我该怎么做: 结果示例: 问题答案: 迅捷4.2+ 从Swift 4.2(使用Xcode 10)开始,只需添加协议一致性即可从中受益。要添加此协议一致性,您只需要在某处写: 如果枚举是您自己的,则可以直接在声明中指定一致性: 然后,以下代码将打印所有可能的值: 与早期Swift版本(3.x和4.x)的兼容性 如果您需要支持Swift 3.x或4.0,则可以通过添加以下代码来模仿S

  • 例如,我如何做类似的事情: 结果示例: