Java 理解泛型的问题

Java 理解泛型的问题,java,generics,Java,Generics,我编写了以下代码: 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; pu

我编写了以下代码:

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;
    }
}
公共类测试
{   
公共静态void main(字符串args[])引发异常
{
System.out.println(新的泛型(“one”).type);//输出“one”
}
}
类泛型
{
公共T型;
公共通用对象(obj)
{
类型=(T)obj;
}
}

我原以为我在演演员时会有例外,但我没有。我得到输出:“一”。但是如果我做了
new generic
type
成为一个Integer类型的变量,那么我如何才能将
字符串
转换为
T
,并将其存储在
generic
类中的变量
type
中,而不会得到异常?解释一下就好了。

这是因为java类型的擦除:

基本上,java将用Object替换T(如果T没有像您的示例中那样的边界上限类型),并且在运行时一切正常。

class-Generic
class Generic<T>
{
    public T type;

    public Generic(T obj)
    {
        type = obj;
    }
}
{ 公共T型; 公共通用(T obj) { 类型=obj; } }

在那里。为您修复了它。

没有例外,因为从代码中删除了对
整数类型的任何检查。由于采用
对象
,编译器不需要插入强制转换,代码只需擦除即可:

System.out.println(new Generic("one").type);
Integer i = (Integer)new Generic("one").type;
System.out.println((String)new Generic(123).type);
请尝试以下分配:

Integer i = new Generic<Integer>("one").type;
请注意,切换类型的行为不同。这将抛出一个
ClassCastException

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

它不是将字符串强制转换为整数…因为它是未绑定的。它将T转换为object,而在sysout中,您将得到obj.toString

正确的方法如下,您将在测试类中自动获得编译异常。。。正如所料

class Generic<T>
{
    public T type;

    public Generic(T t)
    {
        type = t;

    }
}
类泛型
{
公共T型;
公共通用(T)
{
类型=t;
}
}

请用大写字母命名类。您不能。“一”不是整数,不能强制转换为整数。另外,您的泛型函数不是。这并不能回答为什么没有抛出
ClassCastException
的问题。因为对对象的强制转换从来不会抛出ClassCastException?