Qual é a exceção padrão a ser lançada em Java para operações não suportadas / implementadas?

308

Em particular, existe uma Exceptionsubclasse padrão usada nessas circunstâncias?

Krishna Kumar
fonte
É apropriado usar quando uma classe não implementa um método, mas classes filho podem fazê-lo? Em outras palavras, ter um método abstrato em uma classe não abstrata.
Osa
@SergeyOrshanskiy É útil quando, dependendo de como você constrói um objeto, você precisa criar uma classe anônima que implemente uma interface para instanciar uma variável de membro, mas não deseja que ela seja usada. Se você defini-lo nulle usá-lo acidentalmente (ou alguém o fez), obteria NullPointerExceptionsmenos óbvio do que UnsupportedOperationExceptionsneste caso. Apenas um exemplo.
2rs2ts

Respostas:

438

java.lang.UnsupportedOperationException

Lançada para indicar que a operação solicitada não é suportada.

dfa
fonte
4
@JarrodRoberson OK, essa instrução realmente deve ser removida da documentação da classe nesse caso. A exceção parece ser usada por outros pacotes. Eu acho que se a Oracle faz isso, então deveríamos. Vou registrar um relatório de bug.
Maarten Bodewes
1
Esteja ciente de que esta é uma opção desmarcada RuntimeException . Você não receberá feedback ou assistência para lidar com essas exceções durante o tempo de compilação. Se isso for usado para um método stubbed ou um trabalho em andamento, você deverá usar algum tipo de exceção verificada .
TastyWheat
221

Diferencie os dois casos que você nomeou:

  • Para indicar que a operação solicitada não é suportada e provavelmente nunca será, ative um UnsupportedOperationException.

  • Para indicar que a operação solicitada ainda não foi implementada, escolha entre:

    1. Utilizar a NotImplementedExceptionpartir apache commons-lang que estava disponível no commons-LANG2 e foi re-adicionado ao commons-lang3 na versão 3.2.

    2. Implemente o seu próprio NotImplementedException.

    3. Jogue um UnsupportedOperationExceptioncom uma mensagem como "Ainda não implementado".

Steffen
fonte
1
Eu vou com isso, porque me parece razoável. "Ainda" ou "nunca" indicado pela Exceção dá uma idéia de como reagir a isso.
Sschrass #
3
Os nºs 1 ou 2 são muito preferíveis na prática. O nº 3 captura a distinção semântica entre "não suportado" e "não implementado", mas ter uma classe separada facilita a pesquisa rápida para verificar se você não esqueceu de implementar o que deveria antes de confirmar.
Sean U #
4
O nº 3 é melhor para métodos não implementados, pois não requer uma biblioteca de terceiros ou trabalho adicional, mesmo que seja comum.
18718 JoshDM
28

Se você criar uma nova função (ainda não implementada) no NetBeans , ela gerará um corpo de método com a seguinte instrução:

throw new java.lang.UnsupportedOperationException("Not supported yet.");

Portanto, eu recomendo usar o UnsupportedOperationException .

Benny Neugebauer
fonte
14

Se você quiser mais granularidade e melhor descrição, poderá usar NotImplementedException de commons-lang

Aviso: Disponível apenas nas versões 2.6 e posteriores à 3.2.

Guillaume
fonte