首页 新闻 会员 周边

java枚举中是否可以有set方法修改值

0
悬赏园豆:10 [已解决问题] 解决于 2017-05-23 19:52

之前面试过程中面试官问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

JRay的主页 JRay | 初学一级 | 园豆:74
提问于:2017-05-21 18:30
< >
分享
最佳答案
0

即使能也不会这样去做,枚举一般都是常量,你这样set还不乱了套。

收获园豆:10
angelshelter | 大侠五级 |园豆:9887 | 2017-05-21 20:10

既然可以,那是否有需要这样用的时候呢?我用的时候也只是用到了get,没用过set的方式。

JRay | 园豆:74 (初学一级) | 2017-05-21 20:20
其他回答(4)
0

我实际项目中也没看到有人用set的

狼爷 | 园豆:1204 (小虾三级) | 2017-05-21 22:26
0

可以的,枚举的实质就是在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 }
代码如此多娇 | 园豆:214 (菜鸟二级) | 2017-05-22 08:23
0

随意百度被

skateweb | 园豆:170 (初学一级) | 2017-05-23 14:10
0

我认为他的意思不是问你语法上可不可以用set,而是问你再项目中可以不可以用set。

成成成成橙 | 园豆:202 (菜鸟二级) | 2021-06-07 14:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册