2009-05-06 4 views
200

In particolare, esiste una sottoclasse standard Exception utilizzata in queste circostanze?Qual è l'eccezione standard da lanciare in Java per operazioni non supportate/implementate?

+0

È 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

+0

@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 si imposta su 'null' e lo si utilizza accidentalmente (o qualcun altro lo fa) si otterrebbe' NullPointerExceptions' che in questo caso è meno ovvio di 'UnsupportedOperationExceptions'. Solo un esempio – 2rs2ts

risposta

291

java.lang.UnsupportedOperationException

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

+0

ignorare questo ridicolo "questo fa parte del framework delle collezioni" è nel pacchetto 'java.lang', il JavaDoc afferma esplicitamente che questo è quello che serve. –

+3

@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 facesse, allora dovremmo farlo anche noi. Presenterò un bug report. –

8

se si vuole più granularità e meglio decription, è possibile utilizzare NotImplementedException da commons-lang

Attenzione: Disponibile prima le versioni 2.6 e dopo versioni 3.2, solo.

164

distinguere tra i due casi che si chiama:

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

  • per indicare l'operazione richiesta non è stata ancora attuata, scegliere tra questo:

    1. Usare il NotImplementedException da apache commons-lang che era disponibile in commons-lang2 ed è stato ri-aggiunto commons-lang3 in versione 3.2.

    2. Implementare il proprio NotImplementedException.

    3. Lanciare un UnsupportedOperationException con un messaggio come "Non ancora implementato".

+0

Vado con questo, perché mi sembra ragionevole. "Yet" o "never" indicati dall'eccezione danno un'idea su come reagire a questo. – sschrass

+1

# 1 o 2 sono molto preferibili nella pratica.# 3 cattura la distinzione semantica tra "non supportato" e "non implementato", ma avere una classe separata rende più facile fare una ricerca rapida per verificare che non si sia dimenticato di implementare qualsiasi cosa si dovrebbe prima di impegnarsi. –

4

Se si crea una nuova funzione (non ancora implementato) in NetBeans, allora si genera un corpo del metodo con la seguente dichiarazione:

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

Pertanto, vi consiglio di utilizzare la UnsupportedOperationException .

Problemi correlati