Existe algo como o NotImplementedException do .NET em Java?

541

Existe algo como o .NET NotImplementedExceptionem Java?

elísio devorado
fonte

Respostas:

516

Commons Lang tem. Ou você pode jogar um UnsupportedOperationException.

Ravi Wallau
fonte
26
Parece que NotImplementedException foi removido do Commons Lang 3.0.
Michael Younkin
13
Eu acho que desde que o UnsupportedOperationException faz parte da estrutura de coleções, ele só deve ser usado se for usado no contexto de coleções. Caso contrário, uma RuntimeException deve ser usada. docs.oracle.com/javase/7/docs/technotes/guides/collections/…
L.Butz
9
@LeonardButz Vem de java.Lang: docs.oracle.com/javase/1.5.0/docs/api/java/lang/...
Ravi Wallau
5
@ RaviWallau Vi isso: docs.oracle.com/javase/7/docs/api/java/lang/… Parece que essa classe é membro do Java Collection Framework.
11282 L.Butz
3
Ele foi lido no Commons Lang 3.2: commons.apache.org/proper/commons-lang/javadocs/api-3.2
qwertzguy
289

Eu acho java.lang.UnsupportedOperationExceptionque é o que você está procurando.

Chris Dail
fonte
28
Eu digo que é algo bem diferente. O NIE também diz que ainda não pode implementado, onde o UOE me ele nunca vai diz ...
dykam
5
@ Tykam, então não seria uma NotImplementedYetException?
Yishai
106
@Dykam: new UnsupportedOperationException("Not implemented yet")- feliz?
Michael Borgwardt
3
Não quis dizer que era pior, só tinha um caso de uso diferente.
dykam
6
O novo UnsupportedOperationException ("Ainda não implementado") é uma excelente ideia! :) no lang3 por algum motivo eu não tenho NotImplementedException por isso esta é uma grande solução
ufk
55

Você pode fazer isso sozinho (foi o que eu fiz) - para não se incomodar com o tratamento de exceções, você simplesmente estende o RuntimeException, sua classe pode se parecer com isso:

public class NotImplementedException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public NotImplementedException(){}
}

Você pode estendê-lo para receber uma mensagem - mas se você usar o método como eu (ou seja, como um lembrete de que ainda há algo a ser implementado), geralmente não haverá necessidade de mensagens adicionais.

Ouso dizer que só uso esse método, enquanto estou no processo de desenvolvimento de um sistema, para que não perca a noção de quais métodos ainda não foram implementados adequadamente :)

Ready4Android
fonte
3
Eu gosto mais dessa solução porque é fácil ter um manipulador de erros especial, é fácil procurá-la encontrando todas as referências ao construtor NotImplementedException, e são apenas algumas linhas de código. Mas é um pouco inconveniente ter que declarar uma nova classe com seu próprio arquivo.
D Coetzee
1
Concordo. Isso é melhor do que o uso UnsupportedOperationExceptionna minha opinião. Agora, se apenas Java adicionasse isso à biblioteca comum de exceções!
esmagar
12

Como mencionado, o JDK não possui uma correspondência próxima. No entanto, minha equipe ocasionalmente também usa essa exceção. Poderíamos ter seguido UnsupportedOperationExceptionas sugestões de outras respostas, mas preferimos uma classe de exceção personalizada em nossa biblioteca base que descontinuou os construtores:

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);
    }
}

Essa abordagem possui os seguintes benefícios:

  1. Quando os leitores veem NotYetImplementedException, sabem que uma implementação foi planejada e foi esquecida ou ainda está em andamento, enquanto UnsupportedOperationExceptiondiz (de acordo com os contratos de coleta ) que algo nunca será implementado. É por isso que temos a palavra "ainda" no nome da classe. Além disso, um IDE pode facilmente listar os sites de chamada.
  2. Com o aviso de descontinuação em cada site de chamada, seu IDE e a ferramenta de análise de código estático podem lembrá-lo de onde você ainda precisa implementar alguma coisa. (Esse uso de depreciação pode parecer errado para alguns, mas, na verdade, a depreciação não se limita a anunciar a remoção .)
  3. Os construtores estão obsoletos, não a classe. Dessa forma, você recebe apenas um aviso de reprovação no método que precisa ser implementado, não na importlinha (o JDK 9 corrigiu isso , no entanto).
Jens Bannmann
fonte
8

Não, não existe e provavelmente não existe, porque existem muito poucos usos válidos para isso. Eu pensaria duas vezes antes de usá-lo. Além disso, é realmente fácil se criar.

Por favor, consulte esta discussão sobre por que está no .NET.

Eu acho que UnsupportedOperationExceptionchega perto, embora não diga que a operação simplesmente não foi implementada, mas sem suporte mesmo. Isso poderia implicar que nenhuma implementação válida é possível. Por que a operação não é suportada? Deveria mesmo estar lá? Problemas de segregação de interface ou substituição de Liskov, talvez?

Se for um trabalho em andamento, eu gostaria ToBeImplementedException, mas nunca me peguei definindo um método concreto e depois o deixo por tanto tempo que ele entra em produção e seria necessária uma exceção.

Dormouse
fonte