时间:2021-05-19
这是所有修改里最简单的一个,只是去掉了方法签名中同时出现变参和泛型时才会出现的类型警告信息。
换句话说,除非你写代码时习惯使用类型为T的不定数量参数,并且要用它们创建集合,否则你就可以进入下一节了。如果你想要写下面这种代码,那就继续阅读本节:
public static <T> Collection<T> doSomething(T... entries) { ...}还在?很好。这到底是怎么回事?
变参方法是指参数列表末尾是数量不定但类型相同的参数方法。但你可能还不知道变参方法是如何实现的。基本上,所有出现在末尾的变参都会被放到一个数组中(由编译器自动创建),并作为一个参数传入。
这是个好主意,但是存在一个公认的Java泛型缺陷——不允许创建已知类型的泛型数组。比如下面这段代码,编译就无法通过:
HashMap<String, String>[] arrayHm = new HashMap<>[2];不可以创建特定泛型的数组,只能这样写:
HashMap<String, String>[] warnHm = new HashMap[2];可这样编译器会给出一个只能忽略的警告。你可以将warnHm的类型定义为HashMap<String,String>数组,但不能创建这个类型的实例,所以你不得不硬着头皮(或至少忘掉警告)硬生生地把原始类型(HashMap数组)的实例塞给warnHm。
这两个特性(编译时生成数组的变参方法和已知泛型数组不能是可实例化类型)碰到一起时,会令人有点头疼。看看下面这段代码:
HashMap<String, String> hm1 = new HashMap<>();HashMap<String, String> hm2 = new HashMapCollection<HashMap<String, String>> coll = doSomething(hm1,hm2);编译器会尝试创建一个包含hm1和hm2的数组,但这种类型的数组应该是被严格禁止使用的。面对这种进退两难的局面,编译器只好违心地创建一个本来不应出现的泛型数组实例,但它又觉得自己不能保持沉默,所以还得嘟囔着警告你这是“未经检查或不安全的操作”。
从类型系统的角度看,这非常合理。但可怜的开发人员本想使用一个十分靠谱的API,一看到这些吓人的警告,却得不到任何解释,不免会内心忐忑。
以上就是本次介绍的全部知识点内容,希望我们整理的内容能够帮助到大家。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Java和Scala都支持变参方法,写在最后的位置上,最基本的调用方式也都是一样的,一个个罗列过去。也可以传入数组参数,因为变参本质上就是一个数组,就是把...
本文实例讲述了Java调用WebService接口的方法。分享给大家供大家参考。具体如下:这里讲述有参方法Add,代码如下:复制代码代码如下:publicsta
前言函数柯里化就是将多参简化为单参数的一种技术方式,其最终支持的是方法的连续调用,每次返回新的函数,在最终符合条件或者使用完所有的传参时终止函数调用。场景实例与
本文实例讲述了Java使用注解和反射简化编程的方法。分享给大家供大家参考,具体如下:一点睛当调用大量方法,可以使用反射和注解简化编程。二代码importjava
Java实例化类的方法 Java中,类的实例化方法有四种途径:1)使用new操作符2)调用Class对象的newInstance()方法3)调用clone()