Java8 接口中的默认方法

公司代码分common code和product specific code,存在产品相关方法在common code中的问题。介绍了三种解决办法:一是各产品新增空方法提示未实现;二是创建接口定义默认方法;三是低版本Java用class继承,但存在多重继承限制,只能用第一种笨办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  公司代码中分为common code和product specific code,现在有:

一份common.java文件,定义了一些通用方法

一份productA_X.java , 一份productB_X.java,都实现了class X。

 

现在一个productA相关的方法在common.java中定义,并且调用了一个新方法A,该方法定义在productA_X.java中。

问题是一个产品相关的代码不应该放在common code中,但是由于历史原因,目前都是这样做的,所以就要解决其他产品中class X不存在A方法的问题。

1. 最笨的方法,每次一个产品中新增方法A在对应的class X中,其他产品创建一个新方法A,方法内容为空,只提示当前产品并未实现该方法

2. 创建一个接口,将这些方法都定义为默认方法,提供一个默认实现。各个产品的class X只要实现了这个接口即可,也就默认有了A这个方法。这样每次在一个产品中新增方法后,都在该接口中定义一个默认方法即可。

3. 由于接口的默认方法在java1.8中才有,所以在之前的java版本中,不能用方法2,公司中的代码就使用了一个class,让class X去继承这个class。这样就出现新的问题,Java不支持多重继承,如果class X本来就有一个父类,这种方法就也不适用了。这种情况下就只能使用最笨的方法1了,每个产品的更新都要导致其他产品的改动。

本来这个不应该是一个问题,因为common code中不应该依赖于具体的产品。在没有办法的情况下,公司代码又不能使用新的版本,就产生了很多麻烦。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值