栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

java:获取数组组件的类

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java:获取数组组件的类

组件类型

用这个:

array.getClass().getComponentType()

返回

Class
表示数组的组件类型的信息。如果此类不表示数组类,则此方法返回
null

参考:

  • Class.getComponentType()

安全/不安全铸造

有没有一种方法可以从getComponentType()返回的Class强制转换为Class,而不会收到编译器警告?

采取这种方法:

public <T> void doSomething(final T[] array) throws Exception{    final Class<? extends Object[]> arrayClass = array.getClass();    final Class<?> componentType = arrayClass.getComponentType();    final T newInstance = (T) componentType.newInstance();}

这是生成的字节码:

public void doSomething(java.lang.Object[] array) throws java.lang.Exception;     0  aload_1 [array]     1  invokevirtual java.lang.Object.getClass() : java.lang.Class [21]     4  astore_2 [arrayClass]     5  aload_2 [arrayClass]     6  invokevirtual java.lang.Class.getComponentType() : java.lang.Class [25]     9  astore_3 [componentType]    10  aload_3 [componentType]    11  invokevirtual java.lang.Class.newInstance() : java.lang.Object [30]    14  astore 4 [newInstance]    16  return

如您所见,参数类型被擦除为Object
[],因此编译器无法知道T是什么。是的,编译器可以使用

array.getClass().getComponentType()
,但这有时会失败,因为您可以执行以下操作:

Object[] arr = new String[] { "a", "b", "c" };Integer[] integerArray = (Integer[]) arr;doSomething(integerArray);

(在这种情况下,

array.getClass().getComponentType()
返回
String.class
,但
T
代表
Integer
。是的,这是合法的,不会生成编译器警告。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438654.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号