gpt4 book ai didi

java - 如何使用 Spring 更改枚举的属性?

转载 作者:太空宇宙 更新时间:2023-11-04 08:37:52 25 4
gpt4 key购买 nike

我需要在生产环境中隐藏一些菜单选项,但在开发中不需要。

我将其实现为这样的枚举:

public enum Functionality {
FUNCTION_1(true),
FUNCTION_2,
FUNCTION_3(true);

private boolean usable;

Functionality() {
this(false);
}

Functionality(boolean usable) {
this.usable = usable;
}

public boolean isUsable() {
return usable;
}
}

然后,当我需要显示菜单选项时,我会检查是否需要显示该功能。

所以我需要能够在环境开发时更改可用的 boolean 值。但我找不到任何方法在 Spring 中做到这一点。

你知道有什么方法可以做这样的事情吗?

最佳答案

可以更改枚举的字段,但这通常被认为是一个坏主意,并且通常是一种设计味道。

更好的方法可能是根本不使用 usable 字段,而是将其设为计算属性:

public enum Functionality {
FUNCTION_1(true),
FUNCTION_2,
FUNCTION_3(true);

private final boolean restricted;

Functionality() {
this(false);
}

Functionality(boolean restricted) {
this.restricted = restricted;
}

public boolean isRestricted() {
return restricted;
}

public boolean isUsable() {
if (!restricted) {
return true;
} else {
return SystemConfiguration.isDevelopmentSystem();
}
}
}

显然,需要有像 SystemConfiguration.isDevelopmentSystem() 这样的方法才能实现此功能。

在我实现的某些系统中,我使用了另一个枚举:

public enum SystemType {
PRODUCTION,
TESTING,
DEVELOPMENT;

public final SystemType CURRENT;

static {
String type = System.getEnv("system.type");
if ("PROD".equals(type)) {
CURRENT = PRODUCTION;
} else if ("TEST".equals(type)) {
CURRENT = TESTING;
} else {
CURRENT = DEVELOPMENT;
}
}
}

这里我使用系统属性在运行时指定类型,但任何其他配置类型可能也合适。

关于java - 如何使用 Spring 更改枚举的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5961591/

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