Enum
位于java.lang.Enum
,Object
位于java.lang.Object
。那么,为什么Enum
不是Object
? (我得到java.lang.ClassCastException
)
我想创建一个可以接受Object
和Enum
的课程,就像这样......
public class MyType<T extends Enum<T>, Object> {
但这会产生编译错误。如何使我的MyType
能够接受所有(或两种)类的类? (Enum
或Object
)?
答案 0 :(得分:2)
由于每个Java对象都是instanceof Object
,因此没有什么比声明MyType<?>
没有边界更好的了。这将捕获任何类型,包括枚举类型。
答案 1 :(得分:1)
Enum是一个对象。见http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Enum.html 所以
MyType<Object> {
应该有用。
答案 2 :(得分:0)
您可以在documentation上看到:
Excepting Object,没有超类,每个类都有一个和 只有一个直接超类(单继承)。在没有任何 其他显式超类,每个类都隐式地是一个子类 对象
你可以得出结论:
Object
; Object
是一种代表其他类的计算方式,那么由于java不支持多重继承,因此无法实现。答案 3 :(得分: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的JavaDoc来验证这一点。因此,如果您只是告诉MyType
包含对象(MyType<Object>
),它将接受您最初发布的对象和枚举。
虽然注意到这可能会导致不必要的行为,并且被认为是不安全的,因为所有类都是对象。
答案 4 :(得分:0)
我认为你没有正确陈述你的问题。我想您希望您的班级接受Enum
或 Object
。当你这样说时,你会发现这是唯一可能的选择。
如果您希望它接受Enum
和 Object
,则相当于说“接受Enum
”。在这种情况下>是答案。