Ho questo nel mio codice
Thread.currentThread().sleep(x);
Eclipse mi dice di usare lo statico
Thread.sleep(x);
invece, perché? Qual è la differenza, c'è qualche differenza di funzionalità tra questi 2 metodi?
Ho questo nel mio codice
Thread.currentThread().sleep(x);
Eclipse mi dice di usare lo statico
Thread.sleep(x);
invece, perché? Qual è la differenza, c'è qualche differenza di funzionalità tra questi 2 metodi?
Risposte:
C'è un solo metodo, non due, ed è statico. Sebbene sia possibile chiamare un metodo statico tramite un riferimento all'istanza, non è un buon stile. Indica che il programmatore pensa di chiamare un metodo di istanza. Un programmatore confuso potrebbe pensare di poter far dormire un altro thread (non quello attuale) in questo modo, quando non è quello che fa.
Entrambe le righe di codice fanno la stessa cosa, ma la seconda è uno stile migliore.
In Java, il sonno è un metodo statico. Entrambi i tuoi esempi fanno esattamente la stessa cosa, ma la versione precedente crea confusione perché sembra che stia chiamando un metodo su un oggetto specifico ma non lo sta facendo affatto. Nel tuo esempio non avrà molta importanza, ma è più pericoloso se hai quanto segue:
someOtherThread.sleep(x);
Questa volta sembra che tu stia dicendo a qualche altro thread di dormire, ma in realtà stai mettendo il thread corrente a dormire. Il modo per evitare di commettere questo tipo di errore è chiamare sempre metodi statici utilizzando la classe anziché un oggetto specifico.
Le due chiamate al metodo sono identiche nel comportamento perché invocano lo stesso metodo ma l'utilizzo del nome della classe ( Thread in questo caso) piuttosto che dell'istanza per accedere a campi e metodi statici rende chiara questa staticità. Ecco perché viene prodotto questo avviso.
Ma considerando che i campi e i metodi statici sono mostrati in modo particolare nella maggior parte degli IDE (ad esempio in corsivo in Eclipse e IntelliJ IDEA), questo avvertimento è ancora necessario? Forse non tanto necessario quanto lo era nei primi giorni di Java che erano in uso semplici editor.
Thread.currentThread().sleep(x);
o il modo in cui Eclipse dice che il Thread.sleep(x);
contesto statico è richiesto se è necessario, quindi tratteniamo un leggero ritardo con questo sonno.
Il paradigma statico impostato da un oggetto, influenza solo quel particolare ciclo di vita di stampa dell'heap di oggetti, ancora una volta considerando che il ciclo di vita dell'oggetto complessivo statico non è così fastidioso, se necessario può essere utilizzato per facilitare la codifica, ma deve essere fatto con attenzione come piede statico. print è indicato da Class
(ad esempio: - Class.forName(pkg.className)
) come simile al nome e non da qualsiasi altra object
copia stampata in fase di esecuzione di Class in HEAP
memoria.
Anche in questo caso l'uso di un oggetto ha pro e contro per i riferimenti Debole, Fantasma, Forte ...,
Il codice è contorto dalla natura. È solo il modo in cui lo facciamo per farlo funzionare e funzionale.