代码之家  ›  专栏  ›  技术社区  ›  Stunner

在枚举中实现Runnable

  •  0
  • Stunner  · 技术社区  · 5 年前

    我只是在玩enum,我想看看它在一些疯狂的场景下的表现。好吧,很少有java爱好者知道我们可以在枚举中实现接口。

    另外,为什么values()方法不是在枚举类或对象类中声明的。为什么values方法是由java编译器提供的。为什么Sun/Oracle din不考虑在Enum类中实现它。

     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();
    
        }
    }
    
    2 回复  |  直到 5 年前
        1
  •  1
  •   Sweeper    5 年前

    它什么也没印。有人能解释清楚吗?

    注意你没有给 en 价值观。因此,它是 null . 什么时候? 传递给的构造函数 Thread ,线程是 documented 无所事事:

    target -启动此线程时调用其run方法的对象。如果为空,则此类 run 方法不起作用。

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

    为什么Sun/Oracle din不考虑在Enum类中实现它。

    我的推测是 values ,如果它在 Enum<T> ,应该是 abstract

        2
  •  1
  •   Dorian Gray    5 年前

    1) 因为 test.en 为空,您永远不会初始化它。

    2) 实现values()必须由编译器完成,因为数组类型是具体枚举的类型,这里 MyEnum[] Enum[] .