Безопасно ли возвращать Throwable из fillInStackTrace в downcast? - PullRequest
1 голос
/ 11 марта 2020

Если у меня есть class MyException extends Exception, то myException.fillInStackTrace() по-прежнему возвращает Throwable, из-за того, как работает система типов java. Безопасно ли приводить возвращаемое значение к MyException?

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Согласно java источникам:

/**
     * Fills in the execution stack trace. This method records within this
     * {@code Throwable} object information about the current state of
     * the stack frames for the current thread.
     *
     * <p>If the stack trace of this {@code Throwable} {@linkplain
     * Throwable#Throwable(String, Throwable, boolean, boolean) is not
     * writable}, calling this method has no effect.
     *
     * @return  a reference to this {@code Throwable} instance.
     * @see     java.lang.Throwable#printStackTrace()
     */
    public synchronized Throwable fillInStackTrace() {
        if (stackTrace != null ||
            backtrace != null /* Out of protocol state */ ) {
            fillInStackTrace(0);
            stackTrace = UNASSIGNED_STACK;
        }
        return this;
    }

Вот почему ответ - да, безопасно преобразовать возвращаемое значение в MyException, если только вы не переопределили метод fillInStackTrace() в классе MyException .

0 голосов
/ 11 марта 2020

Это зависит от реализации myException.fillInStackTrace (). Пример реализации fillInStacktrace ()

protected static final MyException  ABORT = new MyException () {
        private static final long serialVersionUID = 1687848994976808490L;

        public Throwable fillInStackTrace() {
            return this;
        }
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...