为什么这个演员没有生成编译器警告?

jon*_*ejj 4 java casting runtime-error compiler-warnings

为什么以下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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在Windows机器上使用了jdk1.6.0_25/bin/javac.Eclipse Helios也没有对此发出警告.

相反,它会导致运行时异常:

线程"main"中的异常java.lang.ClassCastException:SuperClass $ AnotherBaseClass无法强制转换为SuperClass $ SomeBaseClass

Pet*_*son 8

Javac仅在使用泛型时警告不安全的强制转换.在这里编译器相信你知道你在做什么:)