如何拥有可以存储无效枚举价值的枚举或枚举的类别?
让我们考虑以下枚举:
@RequiredArgsConstructor
@Getter
public enum Quality {
GOOD(1),
BAD(2);
private final int value;
}
枚举是第三方给出的质量
字段的抽象。 在此处在插座编程上工作。本质上,质量
是TCP数据包上的4个字节整数。
现在,可能有未知的情况,质量
是未知的值。说3。现在3不对应于Quality.good
或Quality.bad
。
因此,期望是,我们将字段转换为枚举(或类似枚举的对象),但请确保它是否无效,然后保留原始值= 3
。
因此,对枚举的期望就像:
// Stateless API abstraction over third party
int value = parseTCPObjectForQuality();
Quality quality = Quality.fromValue(value);
publishQuality(quality);
// Application
Quality quality = receiveQuality();
// Now behaves like an enum
switch(quality) {
GOOD: // dosomething.
BAD : // dosomething.
default: {
// log error maybe.
log.err(quality.getValue());
}
}
// And a isValid() function
if (!quality.isValid()) {
// log error maybe.
log.err(quality.getValue()); // prints 3
}
我们该怎么做?
Let's consider the following enum:
@RequiredArgsConstructor
@Getter
public enum Quality {
GOOD(1),
BAD(2);
private final int value;
}
The enum is an abstraction over the Quality
field given by the third party.
Working on socket programming here. Essentially Quality
is a 4 byte integer on a TCP packet.
Now there can be unknown cases where Quality
is an unknown value. Say 3. Now 3 doesn't correspond to either Quality.GOOD
or Quality.BAD
.
So the expectation is that, we translate the field to the enum (or enum-like object) but ensure if it is invalid then it retains the original value =3
.
So expectation from the enum is like:
// Stateless API abstraction over third party
int value = parseTCPObjectForQuality();
Quality quality = Quality.fromValue(value);
publishQuality(quality);
// Application
Quality quality = receiveQuality();
// Now behaves like an enum
switch(quality) {
GOOD: // dosomething.
BAD : // dosomething.
default: {
// log error maybe.
log.err(quality.getValue());
}
}
// And a isValid() function
if (!quality.isValid()) {
// log error maybe.
log.err(quality.getValue()); // prints 3
}
How can we do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论