Prima devo sottolineare il fatto che CustomException
non estende Exception
quindi non è realmente un Exception
.
Detto questo:
Se non ti interessa il principio di inversione delle dipendenze , allora lasciatelo così com'è. È perfettamente OK perché un'interfaccia dipenda da classi concrete, ad esempio molte interfacce dipendono da String
o Object
che sono classi concrete . Il fatto è che tendiamo a credere che le classi che appartengono all'SDK Java siano più stabili (meno inclini alle modifiche al codice) di quelle che scriviamo.
D'altra parte:
Se vuoi seguire il DIP (che ha innumerevoli vantaggi ed è la mia raccomandazione), allora devi fare una delle due cose:
Opzione 1
- Crea
CustomException
astratto
- Mantieni
void onError(CustomException ex)
come è
Opzione 2
- Crea
CustomException
un'interfaccia
- Mantieni
void onError(CustomException ex)
come è
Con una di queste opzioni si sarebbe conformi al DIP, poiché l'interfaccia non dipenderebbe da alcuna classe concreta, ma solo da astrazioni.
In a direct application of dependency inversion, the abstracts are
owned by the upper/policy layers. This architecture groups the
higher/policy components and the abstracts that define lower services
together in the same package. The lower-level layers are created by
inheritance/implementation of these abstract classes or interfaces.
Martin, Robert C. (2003).
- Agile Software Development, Principles, > Patterns, and Practices. Prentice Hall. pp. 127–131. ISBN
978-0135974445.