Почему мы в решении имеем право писать эти константы в таком виде,как будто они существуют в классе Solution (NEW , TIMED_WAITING , BLOCKED и тд)
Они же есть только в том классе, который наследуется от Thread, а наш класс Solution от него не наследуется
Да и вообще по моему они должны вызываться вот так
Thread.State.NEW
Почему такая запись Thread.State.NEW является ОШИБКОЙ???
А вот в методе public void foo()
запись Thread.State st1 = NEW; // уже наоборот является ОШИБКОЙ
а запись Thread.State st2 = Thread.State.NEW;// является ВЕРНОЙ
Хотя в методе public static void processThreads(Thread... threads) все НАОБОРОТ,ПОЧЕМУ?
public class Solution {
public static void processThreads(Thread... threads) {
for (int i = 0; i < threads.length; i++) {
switch (threads[i].getState()){
case NEW: threads[i].start();break;
case TIMED_WAITING:
case BLOCKED:
case WAITING: threads[i].interrupt();break;
case RUNNABLE: threads[i].isInterrupted();break;
case TERMINATED:
System.out.println(threads[i].getPriority());
}
}
}
public void foo(){
Thread.State st1 = NEW;// ОШИБКА
Thread.State st2 = Thread.State.NEW;// ВСЕ ВЕРНО
}
}
switch, если вражение-селектор даёт результат типа перечисление (enum), допустимы только имена констант соответствующего перечисления. При этом, не следует путать имена констант и выражения доступа (field access expressions) к статическим полям классов. Пример:NEW- Имя константыThread.State.NEW- Выражение доступа к статическому полю класса.