Почему мы в решении имеем право писать эти константы в таком виде,как будто они существуют в классе 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;// ВСЕ ВЕРНО
    }
}