Quale dovrebbe essere la regola generale quando un metodo non dovrebbe essere chiamato in qualche situazione, ma la sua esecuzione non danneggia il programma in generale?
Vedo quale potrebbe essere una piccola contraddizione nella tua affermazione che potrebbe chiarirti la risposta. Perché il metodo non dovrebbe essere chiamato e tuttavia la sua esecuzione non fa male ?
Perché il metodo "non dovrebbe essere chiamato"? Sembra una limitazione autoimposta. Se non vi sono "danni" o impatti sull'API, non esiste un'eccezione. Se il metodo in realtà non deve essere chiamato perché potrebbe creare stati non validi o imprevedibili, allora dovrebbe essere generata un'eccezione.
Ad esempio, se mi avvicinavo a un lettore DVD e premessi "stop" prima di premere "start" e si bloccasse, non avrebbe senso per me. Dovrebbe semplicemente sedersi lì o, nel caso peggiore, 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), che potrebbe indurlo a entrare in uno stato che gli impedirebbe di attivarlo correttamente in un secondo momento? In tal caso, quindi genera un errore anche se, tecnicamente, "non è stato fatto alcun danno" perché potrebbe esserci un problema in seguito. Vorrei sapere questo anche se in realtà non è andato in quello stato. Basta la possibilità. Questo sarebbe un IllegalStateException
.
Nel tuo caso, se la tua macchina a stati è in grado di gestire la chiamata non valida / non necessaria, ignorala, altrimenti genera un errore.
MODIFICARE:
Si noti che un compilatore non invoca un errore se si imposta una variabile due volte senza ispezionare il valore. Inoltre, non impedisce di reinizializzare una variabile. Ci sono molte azioni che potrebbero essere considerate un "bug" da una prospettiva, ma sono semplicemente "inefficienti", "non necessarie", "inutili", ecc. Ho cercato di fornire quella prospettiva nella mia risposta - fare queste cose non è generalmente considerato un "bug" perché non provoca nulla di inaspettato. Probabilmente dovresti affrontare il problema in modo simile.