Java7中如何通过简化变参调用实例方法?
- 内容介绍
- 文章标签
- 相关推荐
本文共计800个文字,预计阅读时间需要4分钟。
这是所有修改中最简单的一个,只需去掉方法签名中同时出现变参和泛型时的类型警告信息。通过这种方式,只有在泛型出现时才会显示类型警告。
这是所有修改里最简单的一个,只是去掉了方法签名中同时出现变参和泛型时才会出现的类型警告信息。
换句话说,除非你写代码时习惯使用类型为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。
本文共计800个文字,预计阅读时间需要4分钟。
这是所有修改中最简单的一个,只需去掉方法签名中同时出现变参和泛型时的类型警告信息。通过这种方式,只有在泛型出现时才会显示类型警告。
这是所有修改里最简单的一个,只是去掉了方法签名中同时出现变参和泛型时才会出现的类型警告信息。
换句话说,除非你写代码时习惯使用类型为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。

