gpt4 book ai didi

Java 泛型转换,非直接

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:35:26 25 4
gpt4 key购买 nike

我发现 Java 中的强制转换有些奇怪,我以前从未见过。在您使用通用方法对其进行编程的地方,转换实际上并未完成。

测试奇怪的东西。

在 HashMap 上:

HashMap<String,Object> map = ...
map.put("hello", "World");
System.err.println((Integer)map.get("hello")); // -----> ClassCastException

在 map 包装器上

MapWrap wrap = ...
wrap.put("hello", "World");
System.err.println(wrap.get("hello",Integer.class)); // -----> don't cast, print World (i guess because println receives an Object reference but the cast should be done before that).
System.err.println(wrap.get("hello", Integer.class).toString()); // -----> print World + ClassCastException

方法代码:

private <T> T get(String key, Class<T> c){
return (T)map.get(key);
}

private Object get(String key){
return map.get(key);
}

有人知道该机制是否有名称或知道一些相关信息吗?

谢谢

最佳答案

Actor :

(T) map.get(key);

因为类型删除,根本不做任何事情。 MapWrap.get() 方法将被删除为:

private Object get(String key, Class<T> c){
return map.get(key);
}

这将永远有效。只会在您将此方法的结果分配给的位置插入对 Integer 的强制转换,因为在第一个 MapWrap 示例中,您将它传递给需要 Object 参数的方法,所以这不会发生。

在第二种情况下,您尝试调用方法 Integer.toString(),因此插入了对 Integer 的转换,但失败了。

您已经传入了类对象,进行“通用转换”的正确方法是这样的:

private <T> T get(String key, Class<T> c){
return c.cast(map.get(key));
}

关于Java 泛型转换,非直接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9023453/

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