Qual è l'eccezione standard da lanciare in Java per operazioni non supportate / implementate?


308

In particolare, esiste una Exceptionsottoclasse standard utilizzata in queste circostanze?


È appropriato utilizzare quando una classe non implementa un metodo, ma le classi figlio possono farlo? In altre parole, avere un metodo astratto in una classe non astratta.
osa,

@SergeyOrshanskiy È utile quando, a seconda di come si costruisce un oggetto, è necessario creare una classe anonima che implementa un'interfaccia per creare un'istanza di una variabile membro, ma non si desidera che venga utilizzata. Se lo imposti nulle lo utilizzi accidentalmente (o lo facesse qualcun altro), otterrai NullPointerExceptionsquali sono meno ovvi che UnsupportedOperationExceptionsin questo caso. Solo un esempio
ore 2

Risposte:


438

java.lang.UnsupportedOperationException

Generato per indicare che l'operazione richiesta non è supportata.


4
@JarrodRoberson OK, quella dichiarazione dovrebbe davvero essere rimossa dalla documentazione della classe in quel caso. L'eccezione sembra essere utilizzata da altri pacchetti. Immagino che se Oracle lo fa, allora dovremmo farlo anche noi. Presenterò una segnalazione di bug.
Maarten Bodewes,

1
Essere consapevoli che questo è un segno di spunta RuntimeException . Non riceverai feedback o assistenza nella gestione di queste eccezioni durante la compilazione. Se questo viene utilizzato per un metodo stub o un work-in-progress, è necessario utilizzare un tipo di eccezione verificata .
TastyWheat

221

Distingue tra i due casi che hai nominato:

  • Per indicare che l'operazione richiesta non è supportata e molto probabilmente non lo farà mai, lanciare un UnsupportedOperationException.

  • Per indicare che l'operazione richiesta non è stata ancora implementata, scegliere tra queste:

    1. Utilizzare NotImplementedExceptionfrom apache commons-lang che era disponibile in commons-lang2 ed è stato nuovamente aggiunto a commons-lang3 nella versione 3.2.

    2. Implementa il tuo NotImplementedException.

    3. Lancia un UnsupportedOperationExceptionmessaggio con "Non ancora implementato".


1
Sto andando con questo, perché mi sembra ragionevole. "Tuttavia" o "mai" indicato dall'eccezione dà un'idea di come reagire a questo.
sschrass,

3
# 1 o 2 sono molto preferibili in pratica. # 3 cattura la distinzione semantica tra "non supportato" e "non implementato", ma avere una classe separata rende più semplice fare una rapida ricerca per verificare che non hai dimenticato di implementare tutto ciò che dovresti prima di impegnarti.
Sean U

4
# 3 è il migliore per i metodi non implementati in quanto non richiede una libreria di terze parti o lavoro aggiuntivo, anche se è in comune.
JoshDM,


14

Se si desidera maggiore granularità e una migliore descrizione, è possibile utilizzare NotImplementedException da commons-lang

Avvertenza: disponibile solo prima delle versioni 2.6 e successive alla 3.2.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.