gpt4 book ai didi

java - 对原始值的泛型转换导致 ClassCastException

转载 作者:行者123 更新时间:2023-11-29 06:00:58 25 4
gpt4 key购买 nike

我在下面有一个方法根据给定的类型对 String 进行强制转换,假设给定的 String 必须是正确的。

private static <T> T parsePrimitive(final Class<T> primitiveType, final String primitiveValue) {
if (primitiveType.equals(int.class) || primitiveType.equals(Integer.class)) {
return primitiveType.cast(Integer.parseInt(primitiveValue));
}
/*
...
for the rest of the primitive type
...
*/
}

但是,当我调用 parsePrimitive(int.class, "10"); 时,

primitiveType.cast(Integer.parseInt(primitiveValue));

这会导致 ClassCastException,对此有什么想法吗?

附注事实上,当我使用 Object 作为返回类型,并且在返回之前没有强制转换时,它在方法之外工作正常,但我认为这不够通用。

在此先感谢您的帮助。

最佳答案

您混淆了自动装箱和类型转换。 Java 编译器将生成字节码以将您的基元装箱和拆箱到对象,反之亦然,但这同样不适用于类型。

  • 装箱/拆箱 = 变量
  • 类型转换=类型

在您的特定情况下, int.class 和 Integer.class 不能相互分配。

Class<?> intClazz = int.class;
Class<?> integerClazz = Integer.class;
System.out.println(intClazz);
System.out.println(integerClazz);
System.out.println(integerClazz.isAssignableFrom(intClazz));

输出:

int
class java.lang.Integer
false

由于您必须在逻辑中进行大量的专门检查,我不确定是否值得尝试提出一种通用方法来将 String 解析为原始值。

关于java - 对原始值的泛型转换导致 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10099699/

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