有没有办法在不创建新的临时ArrayList的情况下更改ArrayList的泛型类型?

时间:2019-08-13 17:55:30

标签: java arraylist collections

我们可以在创建ArrayList<?>()之后将其更改为通用参数类型吗,例如从Arraylist<Integer>()更改为ArrayList<String>,而无需使用临时ArrayList来保存元素,然后将它们复制回新列表?

1 个答案:

答案 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。因此,该函数定义了从longLong的转换。这也适用于您知道类型的其他实例。例如,如果您遇到以下情况:

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

相关问题