У меня есть это в моем коде
Thread.currentThread().sleep(x);
Eclipse говорит мне использовать помехи
Thread.sleep(x);
вместо этого, почему? Каково различие, есть ли некоторое различие в функциональности вообще между этими 2 методами?
Существует только один метод, не два, а это статично. Хотя вы можете вызвать статический метод через ссылку на экземпляр, это не хороший стиль. Указывает, что программист считает, что он или она называет методом экземпляра. Смущенный программист может думать, что он или она может вызвать другую нить (не текущий), чтобы спать таким образом, когда это не то, что он делает.
Обе ваши строки кода делают то же самое, но второй - лучший стиль.
В Java Sleep - статический метод. Обе ваши примеры делают именно то же самое, но прежняя версия сбивает с толку, потому что она выглядит так, как это называется методом на определенном объекте, но это вообще не делает. В вашем примере это не имеет значения многое, но оно опасно, если у вас есть следующее:
someOtherThread.sleep(x);
На этот раз он выглядит так, будто вы говорите спать какого-либо другого потока, но на самом деле вы помещаете текущий поток для сна. Способ избежать этого типа ошибки - всегда вызывать статические методы, используя класс, а не конкретный объект.
Два вызовы методов идентичны в поведении, поскольку они вызывают тот же метод, но используя нить класса ( нить в этом случае), а не экземпляра для доступа к статическим полям и способам. Вот почему это предупреждение производится.
Но учитывая, что статические поля и методы показаны определенным образом в большинстве IDE (например, в курсивом шрифте в Eclipse и Intellij Idea), это предупреждение все еще необходимо? Может быть, не так много, как было в первые дни Java, что простые редакторы были использованы.