首页>>后端>>java->构建一个创建Map的工具类来辅助理解可变传参

构建一个创建Map的工具类来辅助理解可变传参

时间:2023-11-30 本站 点击:1

虽说java作为编译语言,但是它本身也提供了很多运行时能力,今天介绍一个非常基础的知识点,可变参数传递

在日常的开发过程中,创建Map对象还是比较常见的,现在我希望写一个工具类,可以非常简单创建并初始化Map对象

因此我们可以实现一个MapUtil工具类,来支持这个场景

publicstatic<K,V>Map<K,V>newMap(Kk,Vv,Object...kv){Map<K,V>ans=newHashMap<>();ans.put(k,v);for(inti=0;i<kv.length;i+=2){ans.put((K)kv[i],(V)kv[1]);}returnans;}

注意一下上面的实现,kv这个参数就是我们要说的可变参数,在方法内部,kv可以看成是一个数组对象(而且是安全的对象,当不传递时,它的取值也不是null)

在使用可变参数时,下面是一些需要注意的点

可变参数注意与数组参数的冲突

注意下面的两个方法,不能同时出现,直接出现编译错误

publicstatic<K,V>Map<K,V>newMap(Kk,Vv,Object...kv)publicstatic<K,V>Map<K,V>newMap(Kk,Vv,Object[]kv)

重载的选择

如果只有一个可变参数的方法,newMap("key", "value")不会报错,会直接访问下面这个方法,kv参数为空数组

publicstatic<K,V>Map<K,V>newMap(Kk,Vv,Object...kv)

当出现重载时,即如下

publicstatic<K,V>Map<K,V>newMap(Kk,Vv,Object...kv)publicstatic<K,V>Map<K,V>newMap(Kk,Vv)

上面两个方法的调用,如果传参只有两个时,会调用哪个?

newMap("key", "value") 调用的下面的方法

`newMap("key", "value", "k", "v") 调用的上面的方法

可变参数传数组会怎样

虽说我们在使用的时候,将可变参数当做数组来使用,但是传递时,若传数组,是否可行呢?

publicstatic<K,V>Map<K,V>newMap(Kk,Vv,Object...kv){Map<K,V>ans=newHashMap<>();ans.put(k,v);for(inti=0;i<kv.length;i+=2){ans.put((K)kv[i],(V)kv[1]);}returnans;}@Testpublicvoidtt(){Mapmap=newMap("key","value",newObject[]{"1","2"});System.out.println(map);}

实际输出如下

{1=2,key=value}

从实际测试来看,传数组并没有问题

微信公众号: 一灰灰blog


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/java/4977.html