繁体   English   中英

通用并在java中强制转换

[英]Generic and cast in java

假设我有以下代码

E[] arrayVar = (E[])new Object[1];// It causes a compiler warning 

问题是,在什么情况下代码会导致运行时错误,

如果您尝试将结果分配给E的具体类型,那么该代码只会导致运行时错误:

createArray(); // no exception
String[] arr = createArray(); // causes ClassCastException

public static <E> E[] createArray() {
    return (E[]) new Object[1];
}

创建泛型数组的安全方法是使用Array.newInstance

public static <E> E[] createArray(Class<E> component) {
    return (E[]) Array.newInstance(component, 1);
}

此方法不会导致ClassCastException

扩展LastStar007的答案

该语句的问题在于java直到运行时才能确定对象E的类型。 还不幸的是,java没有提供一种简单的方法来确定指定对象的类型(getClass()不适用于此)。

您最好的选择(如果是数字数据)将检查每个助记符或字符数据的最大值,检查每个字符的存储大小。 是的,这听起来很乏味,但java没有typeinfo,比如C ++会让事情变得更容易

它永远不会导致运行时错误,因为它总是会导致编译时错误。 无法将Object转码为E ,因此无法将Object[]转发为E[] 除此之外,您无法创建E类型的数组,因为类在编译时不知道E的类型是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM