【问题标题】:How to lock down a generic type which is an enum如何锁定作为枚举的泛型类型
【发布时间】:2016-08-31 13:03:40
【问题描述】:

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

一开始我想用一个由枚举扩展的抽象类并使用:

public class Cover<T extends AbstractCoverType>

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

public class Cover<T implements CoverType>

如何锁定 Cover 类以仅接受前两个枚举而不接受第三个枚举作为泛型类型?

界面:

public interface CoverType {}

第一个枚举:

public enum FireCoverType implements CoverType {
    SANITATION, RENTAL, GLASS
}

第二个枚举:

public enum CarCoverType implements CoverType {
    ACCESSORIES, LEGAL_ASSISTANCE
}

第三个枚举:

public enum PaymentTerm {
    MONTH, QUARTER, YEAR
}

封面类:

public class Cover<T> {
    private T coverType;
    // getter and setter
}

汽车请求:

public class CarRequest {
    private Cover<CarCoverType> cover;
    // getter and setter
}

【问题讨论】:

    标签: java generics enums


    【解决方案1】:

    在绑定泛型类型定义时使用extends,无论它是类还是接口。

    换句话说,在泛型类型的上部绑定中没有implements - extends 适用于类和接口。

    所以:

    public class Cover&lt;T extends CoverType&gt;

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

    来自documentation

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

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

    【讨论】:

    • 有时,答案可能非常简单。谢谢你救了我!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    相关资源
    最近更新 更多