在 Enum 中实现 Runnable

Implementing Runnable in Enum

我只是在玩枚举,我想看看它在某些疯狂场景下的表现。好吧,很少 java 书呆子可能知道我们实际上可以在枚举中实现接口。 所以我想出了下面的代码,想知道线程是否被创建和调用。我很好奇是否有人可以解释为什么不打印 sysout。下面的代码是有效的,即可以正常编译并执行。它什么都不打印。谁能解释清楚?

还有为什么没有在枚举 class 或对象 class 中声明 values() 方法。为什么 java 编译器提供了 values 方法。为什么 Sun/Oracle 没有想到在 Enum class 中实现它。

 package com.test;


  enum MyEnum implements Runnable{

      ENUM1,ENUM2,ENUM3;
      public void run() {

          System.out.println("Inside MyEnum"+Thread.currentThread().getName());
      }
}


public class EnumTesting {

    MyEnum en;

      public static void main(String[] args) {

    EnumTesting test = new EnumTesting();

          Thread t = new Thread(test.en);
        t.start();

    }
}

1) 因为 test.en 是空的,所以你永远不会初始化它。

2) 实现values()必须由编译器完成,因为数组类型是具体Enum的类型,这里MyEnum[]。如果它在 Enum class 中声明,它需要有一个 return 类型的 Enum[]

It just prints nothing. Can anyone explain clearly?

请注意,您没有给 en 一个值。因此,它是null。当null传递给Thread的构造函数时,线程documented什么都不做:

Parameters:

target - the object whose run method is invoked when this thread is started. If null, this classes run method does nothing.

您可以这样做:

new Thread(MyEnum.ENUM1).start();

Why the Sun/Oracle din't think of implementing it in Enum class.

我的推测是values,如果在Enum<T>,应该是abstract,但是静态方法不能是抽象的。