java接口中定义成员变量后会被不同实现类修改,别忘记接口变量默认是public static final 原创 2021-11-18 16:43:50.0 阅读(2605)次 今天定义了一个接口,它有很多实现类,为了把实现类中的相同的变量抽出去,于是我把它放在了接口类中。 代码如下: 接口代码: ```java public interface ValueHandle { public Map generateModeSupportMap = new HashMap<>(); } ``` 实现类代码: ```java public class DateValueHandle implements ValueHandle { @Override public void afterPropertiesSet() throws Exception { generateModeSupportMap.put(GenerateMode.fixed.name(), ""); generateModeSupportMap.put(GenerateMode.random.name(), ""); // more operators } } ``` 另一个实现类代码: ```java public class NumberValueHandle implements ValueHandle { @Override public void afterPropertiesSet() throws Exception { generateModeSupportMap.put(GenerateMode.fixed.name(), ""); generateModeSupportMap.put(GenerateMode.random.name(), ""); generateModeSupportMap.put(GenerateMode.ratio.name(), ""); generateModeSupportMap.put(GenerateMode.express.name(), ""); generateModeSupportMap.put(GenerateMode.dict.name(), ""); // more operators } } ``` 以上实现类都是在设置各自的generateModeSupportMap,但发现运行过程中所有实现类的generateModeSupportMap都包含了其他实现的所有数据。也就是说generateModeSupportMap可能是共享的,于是查了下接口变量的特性:接口可以理解成统一的"协议",而接口中的属性也属于协议中的内容;但是接口的属性都是公共的,静态的,最终的,成员变量 只能是常量。默认修饰符 public static final,即使不加上这些修饰符,接口里的变量也只能是public static final,所以这也解释了我犯的错。。 java java基础 上一篇:java如何减少if判断让代码优雅一点:采用Map+工厂模式实现 下一篇:java stream去重的几种方式
相关文章 java下载图片(976) java List间计算并集、差集、交集以及去重(3832) java程序员多线程常见的代码bug(1657) java使用BufferedImage放大或缩小图片(4643) java Md5工具类获取字符串的Md5值(1265) maven修改jar包版本不生效解决办法(7124) java stream List转Map与List转List与Map转List以及List转Map(8599) java父类转子类报错?怎么办?如何父类转子类(4508) 图片的base64字符转成BufferedImage(2665) 如何缩小jre1.8(1467) 推荐文章 使用spring4实现websocket连接(1) Parameter index out of range (1 > number of parameters, which is 0(7) spring cloud+feign+mybatis中使用seata0.9实现分布式事务(7) spring cloud gateway报错Only one connection receive subscriber allowed(82) spring cloud中Feign调用诡异报错MethodNotAllowed: status 405 reading(116) elasticsearch7.1保存时报错: Validation Failed: 1: type is missing;(7) 聊聊数据保存到MySQL后数据乱码的问题(1) jquery对象与dom对象互转(1) linux使用epel源yum安装iftop、nload、nginx等(2) linux下nginx安装其他模块(1) 热门文章 java stream去重的几种方式(40819) the dependencies of some of the beans in the application context form a cycle(16324) 解决mybatis打印查询结果集造成太多日志的问题(9839) java enum枚举转list和Map(9722) java stream List转Map与List转List与Map转List以及List转Map(8468) ServletRequest转HttpServletRequest设置header之后取不到header的问题(8434) java中BufferedImage转成 base64字符串(8098) 切分List集合为多个List集合(7385) maven修改jar包版本不生效解决办法(6990) bootstrap.yml配置报错:Could not resolve placeholder 'xx' in value (6949) 标签列表 java java java java java java java基础 微服务 异常处理 mysql clickhouse clickhouse clickhouse clickhouse clickhouse spring cloud spring boot linux elasticsearch feign jdbc spring js docker postgresql solr seata nginx maven gateway hsqldb 数据库 架构 大数据分析 分布式事务 redis canal dubbo hadoop 消息队列 win10 websocket springmvc git html select2 mybatis jenkins rocketmq quartz activemq 数据库集群 ajax bat 电脑 笔记 eclipse 设计模式 阿里云 github freemarker jvm jquery javamail redission redission对象 hystrix http hibernate springmail svn ubuntu ueditor xheditor zookeeper 分布式 小程序 开发工具 gitlab