大家好,我是create17,见字如面。
最近总结一下开发过程中,用到的 Java 接口和抽象类的使用场景,希望能给大家带来一些帮助和启发,也鼓励大家评论区留言自己的见解哟!
抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类中可以包含抽象方法和非抽象方法。抽象方法是没有实现的方法,必须在子类中被实现。抽象类的存在主要是为了让子类共享一些方法或属性,同时又要求子类必须实现某些方法。
我需要创建两个单例模式下的 mqtt 客户端(两客户端信息不同)。一般写法是,两份相同的代码,但 mqtt client 信息不一样。如果考虑复用的场景,我们可以使用接口 + 抽象类的方式去完成。
如下图所示:
两个实体类中,都有 emission 和 percent,现在要根据 emission 分别计算这两个实体类中 emission 占总量的 percent。希望能封装一个方法分别计算出这两个实体类的 percent。
如下图所示:
private <T extends CarbonAccounting> void calculateAndSetEmissionPercent(List<T> list) {
// 计算总排放
float totalEmission = 0f;
for (T vo : list) {
if (vo.getEmission() != null) {
totalEmission += vo.getEmission();
}
}
// 进行百分比的计算并保留两位小数
for (T vo : list) {
if (vo.getEmission() != null && totalEmission > 0) {
float percent = (vo.getEmission() / totalEmission) * 100;
vo.setPercent(NumberUtil.round(percent, 2).floatValue());
} else {
vo.setPercent(0f);
}
}
}
上面方法的传参 List 泛型 T,继承于 CarbonAccounting,可以同时兼容 CarbonAccounting 的子类计算。如下图所示:
好了,本次分享就到这里了,欢迎大家在底部评论区留言自己的见解哟!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有