如何锁定枚举的泛型类型

时间:2016-08-31 13:03:41

标签: java generics enums

我在锁定泛型类型时遇到问题。下面是一个由两个枚举类实现的接口。 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
}

CarRequest:

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

1 个答案:

答案 0 :(得分:6)

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

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

所以:

public class Cover<T extends CoverType>

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

来自documentation

  

请注意,[...] extends在一般意义上用于表示&#34;延伸&#34; (如在课堂上)或&#34;实施&#34; (如在接口中)。

另外值得注意的是,enum无法扩展类,因为它们已隐式扩展java.lang.Enum