为什么在向下投掷Throwable to Exception时没有给出未经检查的强制警告?

ski*_*iwi 5 java casting unchecked-cast

使用此代码:

public class DowncastTest {
    public static void main(String[] args) {
        try {
            System.out.println(1);
        } catch (Exception ex) {
            Throwable cause = ex.getCause();
            if (cause != null) {
                Exception exCause = (Exception)cause;
                System.out.println(exCause);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么javac没有给出未经检查的演员警告?

Exception扩展Throwable,所以你不能只将所有Throwables 转换为Exception.

Jon*_*eet 10

为什么javac没有给出未经检查的演员警告?

因为没有涉及泛型.我不认为"unchecked cast"意味着你认为它意味着什么.它适用于以下情况:

List<?> list = getListFromSomewhere();
List<String> strings = (List<String>) list;
Run Code Online (Sandbox Code Playgroud)

这是一个未经检查的强制转换,因为强制转换List<String>并不真正检查是否list引用List<String>...它无法执行,因为在执行时没有这样的概念.

你此刻从那里得到的投ThrowableException只是一个普通的演员-它会抛出一个ClassCastException,如果cause是一个对象的引用是不是一个Exception(或子类).

  • "你继续使用这个词......我认为这并不意味着你的意思." (3认同)