gpt4 book ai didi

java - 如何启用枚举继承

转载 作者:IT老高 更新时间:2023-10-28 20:53:48 25 4
gpt4 key购买 nike

我正在编写一个库,其中有一组预定义的枚举值。假设,我的枚举如下所示。

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

private String httpMethodType;

}

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

在这之后,我应该可以使用 <? extends EnumClass> 之类的东西了。有 5 种恒定的可能性。

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

最佳答案

您不能让 enum 扩展另一个 enum,并且您不能通过继承将值“添加”到现有 enum

但是,enums 可以实现 interfaces。

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

然后您的 enum 值将由它们的公共(public) interface 引用。

为了加强要求,你可以让你的接口(interface)声明相关的方法,例如在你的情况下,在 public String getHTTPMethodType();.

这将强制实现 enum 为该方法提供一个实现。

此设置加上足够的 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 - 如何启用枚举继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35650045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com