【发布时间】:2020-10-26 14:17:18
【问题描述】:
传统上,当我有一个枚举时:
public enum SomeEnum implements Serializable {
TYPE_1,
TYPE_2;
}
或一个类:
public class Country {
public static final Country SOME_COUNTRY = new Country("someCode");
private final String code;
...
}
在控制器中,我返回这些值来填充一些选择:
@RestController(...)
public List<Field> getFields() {
return Arrays.asList(SomeEnum.class.getEnumConstants());
// or
return Arrays.asList(Country.class.getDeclaredFields());
}
目前,我正在开发一个可以由某些最终产品导入的 webhook 库。一些事件名称来自库本身,但其中一些不在库中(但在最终产品代码中):
Webhook 类如下所示:
public class Webhook {
private String url;
private List<WebhookEvent> events;
...
}
和WebhookEvent如下:
public class WebhookEvent Serializable {
private long id;
private String name;
...
}
并且WebhookEvents 是从数据库中填充的。我不想在最终产品中创建一个持有类,例如:
public class EnabledEvent {
public static final WebhookEvent SOME_EVENT = new WebhookEvent("event.name");
...
}
因为这将从 2 个不同的点控制应用程序的行为。但相反,我希望能够在数据库中有新条目时立即返回这些常量/字段。基本上我希望能够模仿基于数据库中的条目扩展常量/枚举的行为。有没有正确的方法以编程方式实现这一目标?
【问题讨论】:
-
在一个项目中,我们有一个类似的
enums列表,我们必须将其放入数据库并稍后获取,但有些类型的元素较少,所以我们最终使用了两种方式(至少节省了一些调用 db)。 -
我非常想看看你在不保存调用到数据库的情况下会怎样。你能举个例子吗?在这种情况下,使用缓存几乎总是可以轻松避免 db 调用。
-
试图在答案中总结它,让我知道以防从您的角度来看有什么需要改进的地方。