Java Enum<T> vs T 作为变量类型

2022-09-04 01:05:07

本声明之间有什么区别吗?

Thread.State state = Thread.State.NEW;

并且

Enum<Thread.State> state = Thread.State.NEW;

在爪哇?而不是第二个选项是更长一点?


答案 1

这与比较以下情况相同:

Child o = someChild;

Parent o = someChild;

Enum是所有枚举类型的父类。因此,对于第二行,代码不能包含对 的特定成员的引用,特别是语言规范的这一节中描述的成员。Thread.State


答案 2

有什么区别吗....

在实践中,在这种特殊情况下,可能没有。

从理论上讲,是 的子类型。如果声明了(非私有)字段或方法,则可以通过 的第一个声明使用它们,但不能通过第二个声明使用它们。Thread.StateEnum<Thread.State>Thread.Statestate

一般来说,第一种形式是优选的...出于这个原因。


另外,我不认为你能够通过第二个声明中声明的变量看到枚举的方法;例如:staticvalues()valueOf

state.valueOf("BLOCKED")

但是,通过实例引用调用静态方法是不好的。