J'ai ça dans mon code
Thread.currentThread().sleep(x);
Eclipse me dit d'utiliser la 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 2 méthodes?
J'ai ça dans mon code
Thread.currentThread().sleep(x);
Eclipse me dit d'utiliser la 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 2 méthodes?
Réponses:
Il n'y a qu'une seule 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 ou elle appelle une méthode d'instance. Un programmeur confus pourrait penser qu'il ou elle peut faire dormir un autre thread (pas le thread actuel) de cette façon, alors que ce n'est pas ce qu'il fait.
Vos deux lignes de code font la même chose mais la seconde est un meilleur style.
En Java, le sommeil est une méthode statique. Vos deux exemples font exactement la même chose, mais l'ancienne version est déroutante car il semble qu'elle appelle une méthode sur un objet spécifique, mais elle ne le fait pas du tout. Dans votre exemple, cela n'a pas beaucoup d'importance, mais c'est plus dangereux si vous avez les éléments suivants:
someOtherThread.sleep(x);
Cette fois, il semble que vous dites à un autre thread de dormir, mais en fait vous mettez le thread actuel en veille. Le moyen d'éviter de commettre ce type d'erreur est de toujours appeler des méthodes statiques en utilisant la classe plutôt qu'un objet spécifique.
Les deux appels de méthode ont un comportement identique car ils invoquent la même méthode, mais l'utilisation du nom de classe ( Thread dans ce cas) plutôt que de l'instance pour accéder aux champs et méthodes statiques rend cette statique claire. C'est pourquoi cet avertissement est produit.
Mais étant donné que les champs et méthodes statiques sont affichés d'une manière particulière dans la plupart des IDE (par exemple en italique dans Eclipse et IntelliJ IDEA), cet avertissement est-il toujours nécessaire? Peut-être pas autant nécessaire qu'au début de Java que de simples éditeurs étaient utilisés.
Thread.currentThread().sleep(x);
ou la façon dont Eclipse dit que si Thread.sleep(x);
un contexte statique est requis s'il en a besoin, nous nous accrochons donc à un léger retard avec ce sommeil.
Le paradigme statique défini par un objet n'affecte que le cycle de vie d'impression du tas d'objet particulier, encore une fois compte tenu du cycle de vie global de l'objet statique n'est pas si gênant, si nécessaire, il peut être utilisé pour faciliter le codage, mais doit être fait avec précaution en tant que pied statique- print est référencé par Class
(par exemple: - Class.forName(pkg.className)
) comme similaire par son nom et non par une object
copie d'impression unique à l'exécution de la classe en HEAP
mémoire.
Encore une fois, l'utilisation de l'objet a également des avantages et des inconvénients par les références Weak, Phantom, Strong ....,
Le code est compliqué par la nature. C'est juste la façon dont nous faisons pour que cela fonctionne et fonctionne.