有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我想扩展枚举和对象(通用)

Enumjava.lang.Enum中,而Objectjava.lang.Object中。那么,为什么Enum不是Object?(我得到一个^{

我想创建一个既能接受Object又能接受Enum的类,就像这样

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

但这会导致编译错误。如何使我的MyType能够接受所有(或两者)类型的类?(EnumObject


共 (5) 个答案

  1. # 2 楼答案

    你可以在documentation上看到:

    Excepting Object, which has no superclass, every class has one and only one direct superclass (single inheritance). In the absence of any other explicit superclass, every class is implicitly a subclass of Object.

    你可以得出以下结论:

    1. 即使不明确,您的类也将从Object扩展
    2. 如果Object是一种表示其他类的图形方式,那么您将无法使用它,因为java不支持多重继承
  2. # 3 楼答案

    通过查看class object的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包含对象(MyType<Object>),它将接受您最初发布的对象和枚举

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

  3. # 4 楼答案

    我认为你的问题说得不对。我想你希望你的班级接受EnumObject。当你这样说的时候,你会发现这是唯一可能的选择

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

  4. # 5 楼答案

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