Есть ли что-нибудь вроде .NET NotImplementedException в Java? - PullRequest
515 голосов
/ 24 февраля 2010

Есть ли что-нибудь похожее на .NET NotImplementedException в Java?

Ответы [ 5 ]

491 голосов
/ 24 февраля 2010

Commons Lang есть.Или вы можете бросить UnsupportedOperationException.

276 голосов
/ 24 февраля 2010

Я думаю, java.lang.UnsupportedOperationException - это то, что вы ищете.

53 голосов
/ 09 апреля 2011

Вы можете сделать это сами (вот что я сделал) - чтобы не беспокоиться об обработке исключений, вы просто расширяете RuntimeException, ваш класс может выглядеть примерно так:

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}

Вы можете расширить его, чтобы получить сообщение - но если вы используете метод, как я (то есть, как напоминание, что еще нужно что-то реализовать), то обычно нет необходимости в дополнительных сообщениях.

Смею сказать, что я использую только этот метод, пока я нахожусь в процессе разработки системы, и мне легче не забывать, какие методы все еще не реализованы должным образом:)

8 голосов
/ 19 января 2014

Нет, нет, и, вероятно, его нет, потому что для него очень мало действительных применений. Я бы дважды подумал, прежде чем его использовать. Кроме того, действительно легко создать себя.

Пожалуйста, обратитесь к этому обсуждению о том, почему это даже в .NET.

Я думаю, UnsupportedOperationException подходит близко, хотя и не говорит, что операция просто не реализована, но даже не поддерживается. Это может означать, что действительная реализация невозможна. Почему операция не поддерживается? Должен ли он вообще быть там? Может быть проблема с разделением интерфейса или подстановкой Лискова?

Если это в стадии разработки, я бы пошел на ToBeImplementedException, но я никогда не ловил себя на том, что определяю конкретный метод, а затем оставляю его так долго, что он превращается в производство, и возникнет необходимость в таком исключении .

5 голосов
/ 22 мая 2018

Как уже упоминалось, JDK не имеет близкого соответствия. Тем не менее, моя команда иногда использует и такое исключение. Мы могли бы пойти с UnsupportedOperationException, как предлагают другие ответы, но мы предпочитаем пользовательский класс исключений в нашей базовой библиотеке с устаревшими конструкторами:

public class NotYetImplementedException extends RuntimeException
{
    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException()
    {
    }

    /**
     * @deprecated Deprecated to remind you to implement the corresponding code
     *             before releasing the software.
     */
    @Deprecated
    public NotYetImplementedException(String message)
    {
        super(message);
    }
}

Этот подход имеет следующие преимущества:

  1. Когда читатели видят NotYetImplementedException, они знают, что реализация была запланирована и была либо забыта, либо все еще выполняется, тогда как UnsupportedOperationException говорит (в соответствии с контрактами на коллекцию ), что что-то никогда не будет реализованы. Вот почему у нас есть слово «пока» в названии класса. Кроме того, IDE может легко перечислить сайты вызовов.
  2. С предупреждением об устаревании на каждом сайте вызовов ваша среда IDE и инструмент статического анализа кода могут напомнить вам, где вам еще нужно что-то реализовать. (Такое использование амортизации может показаться неправильным для некоторых, но на самом деле амортизация не ограничивается объявлением об удалении .)
  3. Конструкторы устарели, а не класс. Таким образом, вы получите предупреждение об устаревании только внутри метода, который нужно реализовать, а не в строке import (хотя JDK 9 исправил это ).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...