gpt4 book ai didi

java - 理解泛型的问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:40 24 4
gpt4 key购买 nike

我写了下面的代码:

public class Test
{
public static void main(String args[]) throws ParseException
{
System.out.println(new Generic<Integer>("one").type); //outputs "one"
}
}

class Generic<T>
{
public T type;

public Generic(Object obj)
{
type = (T)obj;
}
}

而且我以为我会在执行转换时得到一个异常(exception),但我没有。我得到输出:“一”。但如果我这样做 new generic<Integer> , type成为 Integer 类型的变量,那么我该如何转换 String "one"T并将其存储在变量 type 中在我的 generic上课没有异常(exception)?最好有一个解释。

最佳答案

没有异常(exception)因为type erasure从您的代码中删除对 Integer 类型的任何检查。自 println采用 Object 编译器不需要插入强制转换,代码简单地删除为:

System.out.println(new Generic("one").type);

改为尝试以下分配:

Integer i = new Generic<Integer>("one").type;

在那种情况下,您将得到一个 ClassCastException,因为代码删除为:

Integer i = (Integer)new Generic("one").type;

请注意,切换类型的行为不同。这将抛出一个 ClassCastException:

System.out.println(new Generic<String>(123).type);

那是因为 println(String)使用了重载,因此代码删除为:

System.out.println((String)new Generic(123).type);

关于java - 理解泛型的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22355432/

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