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