What should be the general rule when a method is not supposed to be
called in some situation, but it's execution does no harm to the
program in general?
Vedo quale potrebbe essere una piccola contraddizione nella tua affermazione che potrebbe rendere la risposta chiara a te. Perché il metodo non dovrebbe essere chiamato e tuttavia la sua esecuzione non fa male ?
Perché il metodo "non dovrebbe essere chiamato"? Sembra una restrizione autoimposta. Se non c'è alcun "danno" o impatto sulla tua API, allora non c'è un'eccezione. Se il metodo in realtà non dovrebbe essere chiamato perché potrebbe creare stati non validi o imprevedibili, allora dovrebbe essere generata un'eccezione.
Ad esempio, se raggiungo un lettore DVD e prendo "stop" prima di colpire "start" e si è schiantato, non avrebbe senso per me. Dovrebbe semplicemente sedersi lì o, peggio, riconoscere "stop" sullo schermo. Un errore sarebbe fastidioso e non utile in alcun modo.
Tuttavia, posso inserire un codice di allarme per disattivarlo quando è già spento (chiamando il metodo), ciò potrebbe far sì che esso entri in uno stato che impedirebbe di inserirlo correttamente in seguito? Se è così, allora genera un errore anche se, tecnicamente, "non c'è stato alcun danno" perché potrebbe esserci un problema in seguito. Vorrei sapere di questo anche se in realtà non è andato in quello stato. Solo la possibilità è sufficiente. Questo sarebbe un IllegalStateException
.
Nel tuo caso, se la tua macchina di stato può gestire la chiamata non valida / non necessaria, ignorala, altrimenti genera un errore.
EDIT:
Si noti che un compilatore non richiama un errore se si imposta una variabile due volte senza ispezionare il valore. Inoltre, non ti impedisce di reinizializzare una variabile. Ci sono molte azioni che possono essere considerate un "bug" da una prospettiva, ma sono semplicemente "inefficienti", "inutili", "inutili", ecc. Ho cercato di fornire quella prospettiva nella mia risposta - fare queste cose non è generalmente considerato un "bug" perché non risulta in qualcosa di inaspettato. Probabilmente dovresti affrontare il tuo problema in modo simile.