如何锁定枚举的泛型类型

Mar*_*ger 1 java generics enums

我在锁定泛型类型时遇到问题.下面是一个由两个枚举类实现的接口.的Cover类是使用一个通用的类型,这是在一个指定的CarRequest类.我希望只能使用实现该CoverType接口的枚举.

起初我想过使用一个由枚举扩展的抽象类并使用:

public class Cover<T extends AbstractCoverType>
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为我无法扩展枚举类.我想到了下面介绍的接口解决方案,但在这种情况下,我无法做到:

public class Cover<T implements CoverType>
Run Code Online (Sandbox Code Playgroud)

如何锁定Cover类只接受作为通用类型的前两个枚举而不是第三个?

接口:

public interface CoverType {}
Run Code Online (Sandbox Code Playgroud)

第一个枚举:

public enum FireCoverType implements CoverType {
    SANITATION, RENTAL, GLASS
}
Run Code Online (Sandbox Code Playgroud)

第二个枚举:

public enum CarCoverType implements CoverType {
    ACCESSORIES, LEGAL_ASSISTANCE
}
Run Code Online (Sandbox Code Playgroud)

第三枚枚举:

public enum PaymentTerm {
    MONTH, QUARTER, YEAR
}
Run Code Online (Sandbox Code Playgroud)

封面课:

public class Cover<T> {
    private T coverType;
    // getter and setter
}
Run Code Online (Sandbox Code Playgroud)

CarRequest:

public class CarRequest {
    private Cover<CarCoverType> cover;
    // getter and setter
}
Run Code Online (Sandbox Code Playgroud)

Men*_*ena 6

使用extends绑定的泛型类型定义时,无论它是一个类或接口.

换句话说,implements泛型类型的上层绑定没有 - extends适用于类和接口.

所以:

public class Cover<T extends CoverType>

...是您正在寻找的解决方案,CoverType您的枚举实现的接口在哪里.

文档:

请注意,[...] extends在一般意义上用于表示"扩展"(如在类中)或"实现"(如在接口中).

另外值得注意的是,enums不能扩展类,因为它们已经隐式扩展了java.lang.Enum.