为什么以下 java 代码不生成编译器警告,如“从 SuperClass 到 SomeBaseClass 的不安全转换”?
public abstract SuperClass
{
static SuperClass create()
{
return new AnotherBaseClass();
}
private static class SomeBaseClass extends SuperClass
{
void print()
{
System.out.println("Hello World");
}
}
private static class AnotherBaseClass extends SuperClass
{
}
public static void main(String[] args)
{
SomeBaseClass actuallyAnotherClass = (SomeBaseClass)SuperClass.create();
actuallyAnotherClass.print();
}
}
我在 Windows 机器上使用 jdk1.6.0_25/bin/javac。 Eclipse Helios 也不会对此发出警告。
相反,它会导致运行时异常:
Exception in thread "main" java.lang.ClassCastException: SuperClass$AnotherBaseClass cannot be cast to SuperClass$SomeBaseClass
最佳答案
Javac 仅在使用泛型时警告不安全的转换。这里编译器相信你知道你在做什么:)
关于java - 为什么此转换不生成编译器警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9024762/