Supponiamo di avere questa interfaccia:
public interface OutputChannel extends Closeable {
public void writeOutput(String output);
}
Poi ci sono diverse classi che implementano questa interfaccia e generalmente è possibile che writeOutput()
non possa essere utilizzato dopo che sono stati chiusi.
Tuttavia, tra di loro ci sono classi come NullOutputChannel
(che non fa mai nulla, quindi non gli interessa se è stato chiuso), o classi che delegano l'output ad altri Closeable
s (quindi non donano t attenzione - non fanno IO stessi)
Non sono sicuro che ogni OutputChannel
debba sempre generare IllegalStateException
se writeOutput()
è stato chiamato dopo close()
, o se deve tollerarlo silenziosamente a meno che non incontri un problema di I / O effettivo.
Finora sono venute fuori alcune visioni in conflitto:
LANCIO :
- Chiamare
writeOutput()
dopoclose()
è un errore e non dovrebbe essere tollerato. Anche se non importa in caso diNullOutputChannel
ecc., Potrebbe importare seNullOutputChannel
è stato sostituito da un'altra implementazione diOutputChannel
. - L'interfaccia si comporterà in modo più coerente se il lancio dell'eccezione viene deciso dalla logica generale che non è possibile scrivere dopo la chiusura, piuttosto che dai dettagli di implementazione di una particolare classe.
- Se una classe non lancia un'eccezione in questo caso, nasconde solo un bug. Sarebbe meglio se l'errore si manifestasse indipendentemente dall'implementazione scelta.
Ignora :
- Se una particolare classe non ha problemi con qualcosa, non dovrebbe generare eccezioni.
- Controllare lo stato di
closed
in una classe a cui non importa comunque è una complicazione inutile.
Sarei grato per alcuni argomenti per entrambi gli approcci o per alcune buone pratiche consigliate in queste situazioni.