Java 中 pojo 类能直接使用枚举类型作为返回值以及比较吗??

2018-07-25 11:43:46 +08:00
 pomony

情况是刚入职,看见同事直接在 pojo 类中使用枚举类型作为成员变量,代码在最后。但是阿里 Java 开发手册不建议这么写。

[强制] 二方库里可以定义枚举类型,参数可以使用枚举类型,但是接口返回值不允许使用枚举类型或者包含枚举类型的 POJO 对象。 -- 来自阿里巴巴 Java 开发手册 1.4.0 P36 第 5 条

现在问题有 2 个:

  1. pojo 中能不能直接使用枚举类型作为成员变量呢?
  2. 阿里这么规定的原因?

望能解惑。

EnumA {
	A,
	B;
}

class Pojo {
	private String s;
	EnumA e;
	
	// getter setter
}

class Test {
	EnumA ee;
	public static void main(String[] args) {
	Test t = new Test();
	Pojo p = new Pojo();
		if (t.ee == p.getE()) {
			// do sth
		}
		// ...
	}
}
3322 次点击
所在节点    Java
6 条回复
rockyou12
2018-07-25 11:45:07 +08:00
枚举不好序列化,要对序列化框架自定义很多东西,其他没什么不可以的
zts1993
2018-07-25 11:49:10 +08:00
pojo 如果是 request 类或者内部的是可以的
出口 response 不可以的原因是。如果 server 枚举更新,client 用的枚举定义没有更新,然后服务端返回新的枚举值会导致枚举变量直接为空

总结就是 request 可以用 response 不可以
zts1993
2018-07-25 11:49:52 +08:00
hessian 序列化下。
panpanpan
2018-07-25 14:05:09 +08:00
==没问题。Enum 的 equals()方法就是用的==,遇到问题自己多动手试试,看看文档。

https://github.com/zxiaofan/JDK/blob/master/JDK1.8/src/java/lang/Enum.java#L142

public final boolean equals(Object other) {
return this==other;
}
Ziav
2018-07-25 15:30:10 +08:00
可以是可以但是序列化和反序列化都是字符串,很难自定义
johnniang
2018-07-25 15:44:57 +08:00
```
public enum UserType implements ValueEnum {
GENERAL(0, UserConstant.GENERAL), //
TEACHER(1, UserConstant.TEACHER), //
ADMIN(2, UserConstant.ADMIN), //
CONTESTANT(3, UserConstant.CONTESTANT);

private int value;

private String desc;

private UserType(int value, String desc) {
this.value = value;
this.desc = desc;
}

@Override
public int getValue() {
return this.value;
}

@JsonValue
public String getDesc() {
return desc;
}

@JsonCreator
public static UserType of(String desc) {
UserType type;
switch (desc) {
case UserConstant.GENERAL:
type = GENERAL;
break;
case UserConstant.TEACHER:
type = TEACHER;
break;
case UserConstant.ADMIN:
type = ADMIN;
break;
case UserConstant.CONTESTANT:
type = CONTESTANT;
break;
default:
type = null;
break;
}
return type;
}

}
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/473970

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX