Java 在Enum中实现Runnable

Java 在Enum中实现Runnable,java,enums,runnable,Java,Enums,Runnable,我只是在玩enum,我想看看它在一些疯狂场景下的表现。好吧,很少有java书呆子知道我们实际上可以在Enum中实现接口。 所以我想出了下面的代码,想知道线程是否被创建和调用。我很好奇是否有人能解释为什么没有打印sysout。以下代码有效,即编译良好并执行。它什么也没印出来。有人能解释清楚吗 还有为什么在枚举类或对象类中都不声明values()方法。为什么java编译器提供values方法。为什么Sun/Oracle不考虑在Enum类中实现它 package com.test; enum

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

还有为什么在枚举类或对象类中都不声明values()方法。为什么java编译器提供values方法。为什么Sun/Oracle不考虑在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();

    }
}
1) 因为
test.en
为空,所以您从不初始化它

2) 实现values()必须由编译器完成,因为数组类型是具体枚举的类型,在这里
MyEnum[]
。如果它将在Enum类中声明,则需要返回类型为
Enum[]

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

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

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

请注意,您没有给
en
一个值。因此,它是
null
。当
null
被传递给
Thread
的构造函数时,线程将不执行任何操作:

参数:

target
-启动此线程时调用其run方法的对象。如果为null,则该类
run
方法不执行任何操作

您可以这样做:

new Thread(MyEnum.ENUM1).start();
为什么Sun/Oracle不考虑在Enum类中实现它

我的推测是,
values
,如果它在
Enum
中,应该是
abstract
,但是静态方法不能是抽象的

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

请注意,您没有给
en
一个值。因此,它是
null
。当
null
被传递给
Thread
的构造函数时,线程将不执行任何操作:

参数:

target
-启动此线程时调用其run方法的对象。如果为null,则该类
run
方法不执行任何操作

您可以这样做:

new Thread(MyEnum.ENUM1).start();
为什么Sun/Oracle不考虑在Enum类中实现它


我的推测是,
,如果它在
枚举
中,应该是
抽象的
,但是静态方法不能是抽象的。

谢谢清扫者。。。初始化后,系统输出将打印为Hanks Sweeper。。。初始化后,系统输出被打印出来Hanks Dorian。。返回类型为Enum[]的问题是什么。。。奇怪的是,当您执行
MyEnum.values()
时,希望它的返回类型为
MyEnum[]
@Stunner,所以您会得到一个
MyEnum[]
,而不是
Enum[]
,对吗?返回
Enum[]
的帮助不大,因为您需要强制转换。但现在,
Enum
是通用的,因此可以编写它来返回
T[]
。看看我的答案,他们为什么还没有这么做。是的。他们本可以想出像T[]这样的东西。抽象和静态方法点有意义。。谢谢谢谢你们两位。让我们看看是否有人还有其他观点…谢谢Dorian。。返回类型为Enum[]的问题是什么。。。奇怪的是,当您执行
MyEnum.values()
时,希望它的返回类型为
MyEnum[]
@Stunner,所以您会得到一个
MyEnum[]
,而不是
Enum[]
,对吗?返回
Enum[]
的帮助不大,因为您需要强制转换。但现在,
Enum
是通用的,因此可以编写它来返回
T[]
。看看我的答案,他们为什么还没有这么做。是的。他们本可以想出像T[]这样的东西。抽象和静态方法点有意义。。谢谢谢谢你们两位。让我们看看是否有人还有其他观点。。。