我们可以在创建ArrayList<?>()
之后将其更改为通用参数类型吗,例如从Arraylist<Integer>()
更改为ArrayList<String>
,而无需使用临时ArrayList来保存元素,然后将它们复制回新列表?
答案 0 :(得分:0)
如果两种类型之间存在有效的转换,则可以这样做。例如:
etc/httpd/conf.d/wigs.conf
输出:
[1、2、3、4、5、6]
这将获取WSGIPassAuthorization On
RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
个列表,应用转换函数使每个List<Integer> ints = Arrays.asList(1,2,3,4,5,6);
List<Long> longs = ints.stream().map(val -> (Long) (long) (int) val).collect(Collectors.toList());
System.out.println(longs);
,并将转换后的值收集到Integer
s列表中。
此方法起作用的原因在于转换函数:
Long
。此函数采用一个Long
,将其取消装箱到val -> (Long) (long) (int) val
,将其扩展到Integer
,然后将其装箱到int
。因此,该函数定义了从long
到Long
的转换。这也适用于您知道类型的其他实例。例如,如果您遇到以下情况:
Integer
它还将编译,并输出如下内容:
[B @ 681a9515,B @ 3af49f1c]
之所以起作用,是因为在转换函数(Long
中,您将class A {}
class B extends A{}
List<A> as = Arrays.asList(new B(), new B());
List<B> bs = as.stream().map(val -> (B) val).collect(Collectors.toList());
System.out.println(bs);
列表中的所有值都强制转换为类型val -> (B) val
。但是,如果您强制转换的值不是A
的实例,则会抛出ClassCastException。