Metodi di interfaccia non implementati [chiuso]

-1

Ho trovato una citazione interessante nel mio libro con cui imparo Java:

Manche Methoden der in diesem Kapitel beschriebenen Schnittstellen sind in der Dokumentation als optional gekennzeichnet. Bei manchen Collections-Klassen führt die Nutzung solcher Methoden zu einer UnsupportedOperationException . Sie dürfen sich also nicht darauf verlas- sen, dass jede Collections-Klasse alle Methoden der genutzten Schnitt- stellen tatsächlich implementiert.

Da "Java Einführung" di Michael Kofler

Cerco di tradurlo:

Some methods of interfaces described in this chapter are marked as optional in the documentation. The usage of these methods will lead to a unsupportedOperationException. So you should not think that every Collections-class implements all methods of the interfaces.

Ho imparato che non implementare un metodo di una classe astratta o di un'interfaccia porta a un errore di compilazione. Quindi, come è possibile?

    
posta Henry Weinert 13.02.2018 - 21:15
fonte

2 risposte

6

Questi metodi sono implementati, ma l'implementazione è

throw new UnsupportedOperationException();

Quindi, formalmente, c'è un'implementazione. Ma ogni volta che viene chiamato il metodo, viene lanciata l'eccezione.

    
risposta data 13.02.2018 - 21:17
fonte
5

Questi metodi sono implementati, ma sono implementati come un'eccezione. Quindi per esempio:

@Override
public void remove(T object) {
  throw new UnsupportedOperationException();
}

Questo è considerato cattivo design . Un'interfaccia non dovrebbe contenere operazioni che useranno solo alcuni consumatori di quell'interfaccia. Questo è indicato dal principio di segregazione dell'interfaccia . Tuttavia, questo è il design che Java ha e non è possibile rimuovere questi metodi in un modo compatibile con le versioni precedenti.

Java ha un numero di altre strane decisioni di progettazione attorno alle interfacce, come l'interfaccia marcatore Cloneable sebbene ogni Object abbia già un metodo clone() .

    
risposta data 13.02.2018 - 21:19
fonte

Leggi altre domande sui tag