之前面试过程中面试官问java枚举类中是否可以有set方法?对于指点我当时不是很确定,就回答了可以,之后面试官告诉说是不可以,不能对值去进行改变。
今天偶然看了一篇关于枚举的文章,其中有一个代码是给了set方法的,而且试了一下set方法可以正常用,值也确实被修修改了。
现在我就很疑惑了,到底可不可以有set方法?
下面是枚举类代码:
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 普通方法
public static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
下面是set方法调用的代码:
Color.RED.setName("hongse");
System.out.println(Color.RED.getName());
下面是输出结果:
hongse
即使能也不会这样去做,枚举一般都是常量,你这样set还不乱了套。
既然可以,那是否有需要这样用的时候呢?我用的时候也只是用到了get,没用过set的方式。
我实际项目中也没看到有人用set的
可以的,枚举的实质就是在class中new 了几个静态的实例,枚举可以实现接口,也可以有自己的方法。看代码吧!
1 //你可以把SUCCESS,ERROR,WARN当做是Result的三个实例,有且只有这三个(ps:如果只有一个SUCCESS是不是就是单例模式?扯远了) 2 //那么既然是实例,就可以有对应的成员变量:status和message,那为什么就不能有getter和setter呢? 3 public enum Result { 4 SUCCESS("1", "操作成功"), 5 REEOR("0", "操作失败"), 6 WARN("2", "警告"); 7 8 private String status; 9 private String message; 10 11 Result(String status, String message) { 12 this.status = status; 13 this.message = message; 14 } 15 16 public String getStatus() { 17 return status; 18 } 19 20 public void setStatus(String status) { 21 this.status = status; 22 } 23 24 public String getMessage() { 25 return message; 26 } 27 28 public void setMessage(String message) { 29 this.message = message; 30 } 31 }
随意百度被
我认为他的意思不是问你语法上可不可以用set,而是问你再项目中可以不可以用set。