gpt4 book ai didi

java - 令人惊讶的编译错误获取类的数组类

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:53:10 26 4
gpt4 key购买 nike

最近我在反射方面做了很多工作,并实现了这个小实用方法。我惊讶地发现第一个版本无法编译,但后者可以。

不编译:

 public static <T> Class<T[]> getArrayClassOfType(Class<T> componentType) {
return Array.newInstance(componentType, 0).getClass();
}

编译并工作得很好:

 public static <T> Class<T[]> getArrayClassOfType(Class<T> componentType) {
Class c = Array.newInstance(componentType, 0).getClass();
return c;
}

两个问题:它有什么问题?有更好的方法吗?

这是第一个编译错误:

TypeUtils.java:[12,60] incompatible types: java.lang.Class<capture#1 of ? extends java.lang.Object> cannot be converted to java.lang.Class<T[]>

最佳答案

getClass() 的返回类型是Class<?> .

在您的示例中,您正在分配 Class<?>Class<T[]> (在 return 语句中),这是错误的,你需要一个转换。

这将编译正常:

@SuppressWarnings("unchecked") // added to suppress compiler warning
public static <T> Class<T[]> getArrayClassOfType(Class<T> componentType)
{
return (Class<T[]>) Array.newInstance(componentType, 0).getClass();
}

在第二个示例中,您使用原始类型 Class ,效果不错 - 类型转换原始类型似乎是隐含的。但是,您会收到编译器警告,因为这是一种不鼓励的技术。

如果您正确地将其参数化为 Class<?> ,你也需要类型转换。

关于java - 令人惊讶的编译错误获取类的数组类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27769335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com