gpt4 book ai didi

java - 转换到通用原始类。方法运行无任何异常,如何以及为什么?

转载 作者:行者123 更新时间:2023-11-30 06:12:17 25 4
gpt4 key购买 nike

这是我将对象转换为基本类型的方法。

@SuppressWarnings("unchecked")
public <T> T fetchPrimitive(Object object, Class<T> clazz) {
return (T)object;
}

只要我的 Object 与 T 属于同一类(它是一个基本类,如 int、double 等),它就可以正常工作。

但是,当我提供错误的类进行转换时,此方法也会无一异常(exception)地运行。假设我将对象作为 boolean 值 (true/false) 提供,将 clazz 作为 int.class 提供,那么此方法也会运行并返回 (true/false) 实际对象。

我知道泛型不能在基元上工作。当我提供原始类作为参数并且返回类型为通用时,我只需要了解这里发生了什么。

例如:

Object object = true;
Class clazz = int.class;

Object result = fetchPrimitive(object,clazz);
//result = true and result.getClass() is Boolean.
//I asked it to convert a boolean to int expecting an exception but seems that it simply ignored the casting?

通过运行代码,我了解到它只是在它是原始类时忽略了转换并返回了它是什么对象。我不希望它是这样的,如果提供了错误的类,我希望它抛出异常(ClassCastException)。

最佳答案

因为你已经提供了 clazz,你可以使用 Class::cast 来获得你想要的:

public static <T> T fetchPrimitive(Object object, Class<T> clazz) {
return clazz.cast(object);
}

如果您只进行类型转换,删除会将您的代码转换为如下内容:

public static Object fetchPrimitive(Object object, Class<Object> clazz) {
return (Object) object;
}

这是绝对有效的。

关于java - 转换到通用原始类。方法运行无任何异常,如何以及为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33053072/

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