在Java中是否可以同时返回枚举名和值?
是否可以将枚举名称和标签放在一起? 比如: 我使用的是SpringMVC,但我认为这与此无关 我试图重写在Java中是否可以同时返回枚举名和值?,java,json,spring-mvc,enums,jackson,Java,Json,Spring Mvc,Enums,Jackson,是否可以将枚举名称和标签放在一起? 比如: 我使用的是SpringMVC,但我认为这与此无关 我试图重写toString()方法,但不幸的是,它不起作用 我的代码: 公共枚举类别a{ COMBUSTIVEL(“COMBUSTIVEL”), TROCADEOLEO(“Troca deóleo”), PNEUDIANTEIRO(“Pneu dianteiro”), PNEUTRASEIRO(“Pneu traseiro”), CORRENTE(“CORRENTE”), RELACAO(“Relaçã
toString()
方法,但不幸的是,它不起作用
我的代码:
公共枚举类别a{
COMBUSTIVEL(“COMBUSTIVEL”),
TROCADEOLEO(“Troca deóleo”),
PNEUDIANTEIRO(“Pneu dianteiro”),
PNEUTRASEIRO(“Pneu traseiro”),
CORRENTE(“CORRENTE”),
RELACAO(“Relação”);
私有字符串标签;
类别A(字符串项){
this.label=项目;
}
公共字符串getLabel(){
返回此.label;
}
@凌驾
公共字符串toString(){
返回此.label;
}
公共字符串[][]getList(){
Categoria[]值=Categoria.values();
返回?;
}
}
结果是:
[
"COMBUSTIVEL",
"TROCADEOLEO",
"PNEUDIANTEIRO",
"PNEUTRASEIRO",
"CORRENTE",
"RELACAO"
]
可以这样做:
public static String[][] getList(){
Categoria[] values = Categoria.values();
String[][] result = new String[values.length][2];
for (int i = 0; i < values.length; ++i) {
String[] pair = {values[i].name(), values[i].toString()};
result[i] = pair;
}
return result;
}
公共静态字符串[][]getList(){
Categoria[]值=Categoria.values();
字符串[][]结果=新字符串[values.length][2];
对于(int i=0;i
首先将toString方法更改为
@Override
public String toString() {
return name() + ", " + getLabel();
}
然后更改您的getList()
public字符串[][]getList(){
Categoria[]值=Categoria.values();
List resultList=new ArrayList();
对于(类别值:值){
结果列表.add(value.toString);
}
返回resultList.toArray();
}
您有多种选择如何实现这一目标。您只需返回名称为键、标签为值的映射:
public static Map<String, String> getList() {
return Arrays.stream(Categoria.values())
.collect(Collectors.toMap(Categoria::name, Categoria::getLabel));
}
另一个选项是将枚举映射到自定义对象或创建自定义序列化程序。尝试更简单的方法:
public enum Categoria {
COMBUSTIVEL("Combustível"), TROCADEOLEO("Troca de óleo"), PNEUDIANTEIRO("Pneu dianteiro"),
PNEUTRASEIRO("Pneu traseiro"), CORRENTE("Corrente"), RELACAO("Relação");
private String label;
Categoria(String item) {
this.label = item;
}
public String getLabel() {
return this.label;
}
public void setLabel(String label) {
this.label = label;
}
public static String myText() {
StringBuffer str = new StringBuffer("");
int i = 0;
Categoria[] categoria = Categoria.values();
str.append("[\n");
for(Categoria c : categoria) {
str.append("\t{\""+c.getLabel()+"\", \""+categoria[i].name()+"\"}");
if((i + 1) < categoria.length) {
str.append(",\n");
}
i++;
}
str.append("\n]");
return str.toString();
}
}
public class Test {
public static void main(String[] args) {
System.out.println(Categoria.myText());
}
}
已尝试获取数组,但未成功:公共字符串[][]getList(){Categoria[]values=Categoria.values();返回?;}不要覆盖枚举上的
toString
;这会给其他人带来很多困惑。改用getLabel
(通常可以将枚举中的所有字段设置为final
)。这两种方法都必须是静态的,否则无法以有用的方式调用它们。为什么要使用2D数组?您的解决方案在存储方面可以正常工作,但在检索值方面却没有那么好。地图会更有效。它还允许不受限制地多次存储相同的枚举,除非您添加大量代码来阻止它。问题是询问2D
数组:getList
的返回类型是String[][]
。最好询问OP。我猜这里的API是由需要数组的某个客户端使用的。
public static Map<String, String> getList() {
return Arrays.stream(Categoria.values())
.collect(Collectors.toMap(Categoria::name, Categoria::getLabel));
}
public static String[][] getList() {
return Arrays.stream(Categoria.values())
.map(c -> new String[] {c.name(), c.getLabel()})
.toArray(String[][]::new);
}
public enum Categoria {
COMBUSTIVEL("Combustível"), TROCADEOLEO("Troca de óleo"), PNEUDIANTEIRO("Pneu dianteiro"),
PNEUTRASEIRO("Pneu traseiro"), CORRENTE("Corrente"), RELACAO("Relação");
private String label;
Categoria(String item) {
this.label = item;
}
public String getLabel() {
return this.label;
}
public void setLabel(String label) {
this.label = label;
}
public static String myText() {
StringBuffer str = new StringBuffer("");
int i = 0;
Categoria[] categoria = Categoria.values();
str.append("[\n");
for(Categoria c : categoria) {
str.append("\t{\""+c.getLabel()+"\", \""+categoria[i].name()+"\"}");
if((i + 1) < categoria.length) {
str.append(",\n");
}
i++;
}
str.append("\n]");
return str.toString();
}
}
public class Test {
public static void main(String[] args) {
System.out.println(Categoria.myText());
}
}
[
{"Combustível", "COMBUSTIVEL"},
{"Troca de óleo", "TROCADEOLEO"},
{"Pneu dianteiro", "PNEUDIANTEIRO"},
{"Pneu traseiro", "PNEUTRASEIRO"},
{"Corrente", "CORRENTE"},
{"Relação", "RELACAO"}
]