gpt4 book ai didi

java - 在Java中如何编写代码来循环任意枚举?

转载 作者:行者123 更新时间:2023-12-01 06:49:22 25 4
gpt4 key购买 nike

如何编写代码来循环任意枚举?

因此,在下面的代码中使用枚举作为提供的值来创建 Html 选择循环,但我看不到如何将枚举传递给方法,或如何访问标准 .values() .ordinal() 方法。所以目前我已经硬编码了一个特定的枚举 RenameFileOptions 但我想使用任何枚举,我可以解析枚举类,例如 RenameFileOptions.class 但我仍然如何访问 .name().values().ordinal()

public ContainerTag addCombo(UserOption userOption, int selectedValue)
{
return div(
label(userOption.getLabel().getMsg())
.withTitle(userOption.getTooltip().getMsg()),
select(
each(Arrays.asList(RenameFileOptions.values()),
next ->
iffElse(next.ordinal()==selectedValue,
option(next.name()).attr(Html.SELECTED, Html.SELECTED).withValue(String.valueOf(next.ordinal())),
option(next.name()).withValue(String.valueOf(next.ordinal()))
)
))
.withName(userOption.getOption())
);
}

更新由于似乎没有办法以一种非黑客的方式实现这一点,所以我改为向每个枚举添加了 getOptions() 方法,这就是发送到我的 addCombo 方法的内容。这意味着我必须本质上重复代码,我不喜欢这样做,但这意味着 addCombo() 方法按要求工作,并且通过不引入困难的语法使代码更易于理解。

public enum RenameFileOptions implements OptionList
{
NO(TextLabel.RENAME_FILE_OPTION_NO),
YES_IF_MATCHED_TO_RELEASE(TextLabel.RENAME_FILE_OPTION_YES_IF_RELEASE_MATCH),
YES_IF_MATCHED_TO_RELEASE_OR_SONG(TextLabel.RENAME_FILE_OPTION_YES_IF_RELEASE_OR_SONG_MATCH),
YES_IF_HAS_BASIC_METADATA(TextLabel.RENAME_FILE_OPTION_YES_IF_HAS_METADATA),
YES_FOR_ALL_SONGS(TextLabel.RENAME_FILE_OPTION_YES),

;
private TextLabel label;

RenameFileOptions(TextLabel label)
{
this.label=label;
}

public String getName()
{
return label.getMsg();
}

public String toString()
{
return getName();
}

public static List<NameKey> getOptions()
{
List<NameKey> options = new ArrayList<NameKey>();
for(RenameFileOptions next:RenameFileOptions.values())
{
options.add(new NameKey(next.ordinal(), next.getName()));
}
return options;
}
}

public class NameKey
{
private Integer id;
private String name;

public NameKey(Integer id, String name)
{
this.id =id;
this.name=name;
}
public Integer getId()
{
return id;
}

public void setId(Integer id)
{
this.id = id;
}

public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}
}

最佳答案

您应该使用Class.getEnumConstants()方法。

所以,代码的中间部分应该类似于

                each(Arrays.asList(enumClass.getEnumConstants()),
next ->
iffElse(next.ordinal()==selectedValue,
option(next.name()).attr(Html.SELECTED, Html.SELECTED).withValue(String.valueOf(next.ordinal())),
option(next.name()).withValue(String.valueOf(next.ordinal()))
)
))

你应该通过Class<? extends Enum<?>> enumClass在方法参数中。

关于java - 在Java中如何编写代码来循环任意枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47773694/

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