0

Enum是在java.lang.Enum,并且Object是在java.lang.Object。那么,为什么Enum不是一个Object?(我得到一个java.lang.ClassCastException

我想做一个可以接受两者的课程ObjectEnum就像这样......

public class MyType<T extends Enum<T>, Object> {

但这会产生编译错误。我怎样才能让我MyType接受所有(或两种)类型的课程?(EnumObject)?

4

5 回答 5

2

由于每个 Java 对象都是instanceof Object,没有什么比MyType<?>无边界声明更好的了。这将捕获任何类型,包括枚举类型。

于 2012-06-28T13:55:57.280 回答
1

枚举是一个对象。见http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Enum.html 所以

MyType<Object> {

应该管用。

于 2012-06-28T13:55:17.470 回答
0

您可以在文档中看到:

除了没有超类的 Object 之外,每个类都有一个且只有一个直接超类(单继承)。在没有任何其他显式超类的情况下,每个类都隐含地是 Object 的子类。

你可以得出结论:

  1. 即使不明确,您的课程也将从Object;
  2. 如果Object是一种表示其他类的计算方式,那么您将无法做到,因为 java 不支持多重继承。
于 2012-06-28T13:56:12.640 回答
0

只需查看类对象的 API,您就可以阅读:

Class Object is the root of the class hierarchy. Every class has Object as a superclass. 
All objects, including arrays, implement the methods of this class. 

这意味着这Enum是一个对象(您也可以通过查看Enum的 JavaDocs 来验证这一点)。因此,如果您只是告诉MyType包含 Object( MyType<Object>),它将接受您最初发布的 Object 和 Enum。

尽管请注意这可能会导致不需要的行为并且被认为是不安全的,因为所有类都是对象。

于 2012-06-28T14:00:47.710 回答
0

我不认为你已经正确地陈述了你的问题。我想你希望你的班级接受Enum Object。当你这样说时,你会发现这是唯一可能的选择。

如果你想让它接受Enum and Object,那相当于说“接受Enum”。在这种情况下 > 就是答案。

于 2012-06-29T01:00:27.300 回答