作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在下面有一个方法根据给定的类型对 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/
我是一名优秀的程序员,十分优秀!