Tengo esto en mi código
Thread.currentThread().sleep(x);
Eclipse me dice que use la estática
Thread.sleep(x);
en cambio, ¿por qué? ¿Cuál es la diferencia? ¿Existe alguna diferencia de funcionalidad entre estos 2 métodos?
Tengo esto en mi código
Thread.currentThread().sleep(x);
Eclipse me dice que use la estática
Thread.sleep(x);
en cambio, ¿por qué? ¿Cuál es la diferencia? ¿Existe alguna diferencia de funcionalidad entre estos 2 métodos?
Respuestas:
Solo hay un método, no dos, y es estático. Si bien puede llamar a un método estático a través de una referencia de instancia, no es un buen estilo. Indica que el programador cree que está llamando a un método de instancia. Un programador confundido podría estar pensando que puede hacer que otro hilo (no el actual) se quede dormido de esta manera, cuando eso no es lo que hace.
Ambas líneas de código hacen lo mismo, pero la segunda es mejor estilo.
En Java, el sueño es un método estático. Ambos ejemplos hacen exactamente lo mismo, pero la versión anterior es confusa porque parece que está llamando a un método en un objeto específico, pero no lo está haciendo en absoluto. En su ejemplo, no importará mucho, pero es más peligroso si tiene lo siguiente:
someOtherThread.sleep(x);
Esta vez parece que le estás diciendo a otro hilo que duerma, pero de hecho estás poniendo el hilo actual a dormir. La forma de evitar cometer este tipo de error es llamar siempre a métodos estáticos utilizando la clase en lugar de un objeto específico.
Las dos llamadas a métodos tienen un comportamiento idéntico porque invocan el mismo método, pero el uso del nombre de la clase ( Thread en este caso) en lugar de una instancia para acceder a los campos y métodos estáticos aclara esta estática. Por eso se produce esta advertencia.
Pero teniendo en cuenta que los campos y métodos estáticos se muestran de una manera particular en la mayoría de los IDE (por ejemplo, en cursiva en Eclipse e IntelliJ IDEA), ¿sigue siendo necesaria esta advertencia? Tal vez no sea tan necesario como en los primeros días de Java que se usaban editores simples.
Thread.currentThread().sleep(x);
o la forma en que Eclipse lo diceThread.sleep(x);
se requiere un contexto estático si es necesario, por lo que esperamos un ligero retraso con este sueño.
El paradigma estático establecido por un objeto, solo afecta el ciclo de vida de impresión del montón de objetos en particular, nuevamente considerando que el ciclo de vida general del objeto estático no es tan molesto, si es necesario, puede usarse para facilitar la codificación, pero debe hacerse con cuidado como pie estático. print es referido por Class
(por ejemplo: - Class.forName(pkg.className)
) como like por nombre y no por cualquiera object
que sea una copia impresa única en tiempo de ejecución de Class en HEAP
memoria.
Una vez más, el uso de objeto también tiene pros y contras por tipo de referencias Débil, Fantasma, Fuerte ....,
El código está enredado por la naturaleza. Es la forma en que lo hacemos para que funcione y funcione.