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?