为什么阿里巴巴RPC接口不允许使用枚举类型?
Java后端技术
共 4108字,需浏览 9分钟
· 2021-01-03
往期热门文章:
1、《往期精选优秀博文都在这里了!》 2、老大,Service层需要接口吗? 3、那些总是写“烂代码”的同学,强烈推荐你用这款IDEA插件! 4、烂大街的Spring循环依赖该如何回答? 5、IDEA 2020年最后一个版本更新了,机器学习都整上了
java.lang.IllegalArgumentException:
No enum constant com.a.b.f.m.a.c.AType.P_M
一方库指的是本项目中的依赖 二方库指的是公司内部其他项目提供的依赖 三方库指的是其他组织、公司等来自第三方的依赖
public interface AFacadeService {
public AResponse doSth(ARequest aRequest);
}
public Class AResponse{
private Boolean success;
private AType aType;
}
public enum AType{
P_T,
A_B
}
public class BService {
@Autowired
AFacadeService aFacadeService;
public void doSth(){
ARequest aRequest = new ARequest();
AResponse aResponse = aFacadeService.doSth(aRequest);
AType aType = aResponse.getAType();
}
}
public enum AType{
P_T,
A_B,
P_M
}
public enum AType{
P_T,
A_B
}
public static
> T valueOf(Class enumType, String name ) {
T result = enumType.enumConstantDirectory().get(name);
if (result != null)
return result;
if (name == null)
throw new NullPointerException("Name is null");
throw new IllegalArgumentException(
"No enum constant " + enumType.getCanonicalName() + "." + name);
}
![-w1538](https://filescdn.proginn.com/e0d96e294eb5a9c4c869f15121160845/ac0ea8fe9012819857045ec323813d0f.webp)
1、枚举严格控制下游系统的传入内容,避免非法字符。 2、方便下游系统知道都可以传哪些值,不容易出错。
1、如果二方库升级,并且删除了一个枚举中的部分枚举项,那么入参中使用枚举也会出现问题,调用方将无法识别该枚举项。 2、有的时候,上下游系统有多个,如C系统通过B系统间接调用A系统,A系统的参数是由C系统传过来的,B系统只是做了一个参数的转换与组装。这种情况下,一旦A系统的二方库升级,那么B和C都要同时升级,任何一个不升级都将无法兼容。
public Class AResponse{
private Boolean success;
/**
* @see AType
*/
private String aType;
}
往期热门文章:
1、《历史文章分类导读列表!精选优秀博文都在这里了!》
2、万亿级数据应该怎么迁移? 3、从应用到底层 36张图带你进入Redis世界 4、写代码有这16个好习惯,可以减少80%非业务的bug 5、顺丰快递:请签收MySQL灵魂十连
6、一个基于SpringBoot + MyBatis + Vue的代码生成器 7、Redis 分布式锁使用不当,超卖了100瓶飞天茅台!!! 8、如何设计订单系统?这篇写得太好了! 9、如果MySQL磁盘满了,会发生什么?还真被我遇到了! 10、阿里开源的27个项目,值得收藏!
评论