java泛型方法实现数值类型加法
项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步
1.实现数值类型加法
实际开发中,经常有数值类型求和的需求,例如实现int类型的加法:
public int add(int num1, int num2) {return num1 + num2;}
有时候还需要实现long类型的求和:
public long add(long num1, long num2) {return num1 + num2;}
如果还需要double类型的求和,需要重新在重载一个输入是double类型的add方法。
其实逻辑都是一样的,只是输入参数类型不一样而已,正好在java中数值类型有个公共的父类:Number。所以我们可以这么做:
public <T extends Number> double add(T t1, T t2) {double allsum;allsum = t1.doubleValue() + t2.doubleValue();return allsum;}@Testpublic void testAdd() {int int1 = 1;int int2 = 2;System.out.println("Integer sum is: " + add(int1, int2));long long1 = 100;long long2 = 200;System.out.println("Long sum is: " + add(long1, long2));float f1 = 1.0f;float f2 = 2.0f;System.out.println("Float sum is: " + add(f1, f2));double d1 = 1.0;double d2 = 2.0;System.out.println("Double sum is: " + add(d1, d2));}
将上述的test方法run起来以后,输出如下:
Integer sum is: 3
Long sum is: 300
Float sum is: 3.0
Double sum is: 3.0
2.实现数值类型集合的加法
上面是单个数值类型,推广一下,对于数值类型的集合来说,也经常会有类似的需求,这个时候我们可以也做类似的泛型方法:
public class GenericAdd {//extend限制返回时候的类型public static void sumlist(List<? extends Number> list) {double sum = 0.0;for(Number each : list) {sum += each.doubleValue();}double sum2 = list.stream().mapToDouble(x -> x.doubleValue()).sum();System.out.println(sum);System.out.println(sum2);}//super限制添加时候的类型public static void lowerBound(List<? super Number> list) {list.add(new Integer(1));list.add(new Float(2));Integer value1 = (Integer) list.get(0);Float value2 = (Float) list.get(1);System.out.println(value1 + "\t" + value2);}public static void main(String[] args) {List<Number> list = new ArrayList<>();lowerBound(list);System.out.println("---------");List<Integer> intList = new ArrayList(){{add(1); add(2); add(3);}};sumlist(intList);System.out.println("---------");List<Double> doubleList = new ArrayList(){{add(10.0); add(20.0); add(30.0);}};sumlist(doubleList);}}
上面代码的输出结果如下:
1 2.0
---------
6.0
6.0
---------
60.0
60.0
这样就达到了数值类型集合求和的需求!
java泛型方法实现数值类型加法相关推荐
- java poi设置单元格格式为数值,Apache POI 如何读取Excel中数值类型单元格所规定的保留小数位?...
问题描述 java apache poi 包内是否有方法可以获取Excel数值类型单元格中保留的位数? 问题出现的环境背景及自己尝试过哪些方法 有这么一个场景: 需求:从Excel文件中读取数据,原样 ...
- java使用redis incr,JFinal Redis plugin 有关数值类型incr操作的bug
先上测试代码:public class TestCache { private static final Cache testCache = Redis.use(CacheCons.TEST) ; p ...
- Java数值类型与补码关系讨论
随着学习计算机知识的加深,许多地方都遇到原码.反码.补码.很多关于计算机的书籍都介绍原码.反码.补码的表示方法,但是为什么要用到原码.反码.补码却没详细说.为什么要使用?我们知道数值在计算机中表示形式 ...
- Java黑皮书课后题第2章:2.18(打印表格)编写程序,显示下面的表格,将浮点数值类型转化为整数
2.18(打印表格)编写程序,显示下面的表格,将浮点数值类型转化为整数 题目 题目描述 代码 方法评价 化繁为简:强制(数据)类型转换 题目 题目描述 2.18(打印表格)编写程序,显示下面的表格,将 ...
- java byte 无符号类型_获取java byte的无符号数值
byte a = (byte)234; System.out.println(a); 上面的代码,结果是-22,因为java中byte是有符号的,byte范围是-128~127. 如果想输出234,该 ...
- java使用POI导出Excel设置单元格格式为数值类型
最近做项目遇到的坑,百度了半天导出都为货币类型.自定义类型和常规类型,,,最后终于解决,在此记录一下 其中contextstyle.setDataFormat(df.getFormat("0 ...
- python bool类型_Python 的内置数值类型
Python 是一种敏捷的.动态类型化的.极富表现力的开源编程语言,可以被自由地安装到多种平台上.Python 代码是被解释的.如果您对编辑.构建和执行循环较为熟悉,则 Python 代码对您来说更简 ...
- python语言整数类型-Python 的内置数值类型
Python 是一种敏捷的.动态类型化的.极富表现力的开源编程语言,可以被自由地安装到多种平台上.Python 代码是被解释的.如果您对编辑.构建和执行循环较为熟悉,则 Python 代码对您来说更简 ...
- java负数用什么类型定义_(转) Java中的负数及基本类型的转型详解
(转) https://my.oschina.net/joymufeng/blog/139952 面这行代码的输出是什么? 下面两行代码的输出相同吗? 请尝试在Eclipse中运行上面的两个代码片段, ...
- java泛型之有界类型
为什么80%的码农都做不了架构师?>>> 在前面的例子中,可以使用任意类替换类型参数.对于大多数情况这很好,但是限制能够传递给类型参数的类型有时是有用的.例如,假设希望创建一个 ...
最新文章
- Playing Video on iPhone Cocos2D-X
- 如何制作一个通用的多系统安装U盘七(Windows相关配置)
- 错误:cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp”
- RFID中间件成为全球软件产业争夺新焦点
- Js中的callback机制
- Pytorch学习-Task1
- vuex的命名空间有哪些_Vue 3 带来的 Vuex 的替代方案
- 深入理解 PHP7 中全新的 zval 容器和引用计数机制
- ❤️六W字《计算机基础知识》(八)(建议收藏)❤️
- uniitest怎么传参数
- Bash-Shell-02
- 在 Win10 中配置 Linux 开发环境
- Effective Java (7) - 避免终止方法
- Vieux-部分型号iPhone\iPad\iPod降级工具使用教程
- 什么是DDD(领域驱动设计)?
- 计算机科学与技术b类大学名单,双一流a类大学和b类大学名单及学科
- 微信红包随机算法转载
- Android,上传一张本地图片到服务器,Okhttp的post请求上传图片本地服务器
- java bidi_Java Bidi isRightToLeft()用法及代码示例
- Windows系统共享文件夹或打印机等设备的dos脚本自动化