繁体   English   中英

Enum中的Java有界类型参数

[英]Java Bounded Type Parameter in Enum

我正在尝试创建以下枚举。

public enum MyEnum{
     LEAD {
       @Override 
       public boolean isValid(Lead lead) { //compile error, asks to retain type as T
       }
     },
     TASK {
       @Override 
       public boolean isValid(Task task) { //compile error, asks to retain type as T
       }
     };

     public abstract <T extends SObject> boolean isValid(T  object);
}

LeadTask类都扩展了SObject 我的意图是基本上让客户能够使用MyEnum.LEAD.isValid(lead)MyEnum.TASK.isValid(task) 编译器不应允许传递其他类型。

有人可以帮助理解为什么会这样。

谢谢

您需要使用相同的泛型方法覆盖泛型方法。 如果你想做你想要的,你需要一个泛型 - enum不可能。

关键是我通过类引用引用enum - 即

final MyEnum myenum = MyEnum.LEAD;

现在,如果我调用myenum.isValid()我应该可以使用abstract方法定义的任何 SObject来调用它。
您拥有的通用方法定义实际上并没有做任何事情。 它所做的就是捕获传入SObject的类型并将其存储为T 例如,通用方法通常用于将参数类型联系在一起

<T> void compare(Collection<T> coll, Comparator<T> comparator);

在这里,我们不关心什么T的是-所有我们需要的是, Comparator可以比较是在的东西Collection

你在想什么是一个泛型类,如:

interface MyIface<T> {
    boolean isValid(T  object);
}

接着

class LeadValid implements MyIface<Lead> {
    public boolean isValid(Lead object){}
}

您会发现不同之处在于您将拥有MyIface<Lead> - 您必须声明MyIface类型 enum情况下,你只有一个MyEnum

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM