java - 为什么此转换不生成编译器警告?

标签 java casting compiler-warnings runtime-error

为什么以下 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/

相关文章:

java - Threads之间划分一个奇数

java - 如何将对象转换为仅在运行时已知的类型?

C++——不同类型对象的数组

c++ - 全局摆脱警告C4503

java - 没有 apk 文件存在 PhoneGap 项目

java - 反序列化 Gson 中的通用列表

java - Android 软键盘在重新打开时隐藏 EditText

c++ - boost::detail::addr_impl_ref 的目的是什么?

scala - 如何匹配函数签名而不在 Scala 中收到类型删除编译器警告

delphi - 编译器警告 "return value might be undefined"