83 votes

Java: Thread.currentThread (). Sleep (x) et Thread.sleep (x)

J'ai ceci dans mon code

 Thread.currentThread().sleep(x);
 

Eclipse me dit d'utiliser le statique

 Thread.sleep(x); 
 

au lieu de cela pourquoi? Quelle est la différence, y a-t-il une différence de fonctionnalité entre ces deux méthodes?

132voto

Sean Owen Points 36577

Il n'y a qu'une méthode, pas deux, et c'est statique. Bien que vous puissiez appeler une méthode statique via une référence d'instance, ce n'est pas un bon style. Cela indique que le programmeur pense qu'il appelle une méthode d'instance. Un programmeur confus pense peut-être qu'il peut faire dormir un autre thread (pas celui en cours) de cette façon, alors que ce n'est pas le cas.

Vos deux lignes de code font la même chose, mais la seconde est un meilleur style.

32voto

Mark Byers Points 318575

En Java, le sommeil est une méthode statique. Les deux exemples pour faire exactement la même chose, mais la première version est source de confusion car il semble que c'est l'appel d'une méthode sur un objet spécifique, mais elle ne fait pas ça du tout. Dans votre exemple, il ne sera pas beaucoup d'importance, mais il est plus dangereux si vous disposez des éléments suivants:

someOtherThread.sleep(x);

Cette fois, il semble que vous dites à un autre thread pour dormir, mais en fait, vous êtes de mettre le thread en cours du sommeil. Le moyen d'éviter de faire ce type d'erreur est de toujours faire appel à des méthodes statiques à l'aide de la classe plutôt qu'à un objet spécifique.

3voto

Amir Moghimi Points 949

Les deux appels de méthode sont identiques dans le comportement, car elles font appel à la même méthode, mais en utilisant le nom de la classe (Thread dans ce cas) plutôt que par exemple pour accéder à des champs statiques et méthodes qui rend cette statique-ness clair. C'est pourquoi cet avertissement est produit.

Mais considérant que les champs statiques et méthodes sont présentées d'une manière particulière dans la plupart des IDEs (par exemple en italique dans Eclipse et IntelliJ IDEA), est-ce un avertissement-elle encore nécessaire? Peut-être pas autant nécessaire qu'il était dans les premiers jours de Java que de simples éditeurs étaient en cours d'utilisation.

-9voto

Jay Points 15

Casser le code comme mentionné ci-dessous et l'éclipse acceptera cela,

 Thread.currentThread();
Thread.sleep(x);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X