gpt4 book ai didi

java - 如何锁定作为枚举的泛型类型

转载 作者:行者123 更新时间:2023-11-29 06:53:42 25 4
gpt4 key购买 nike

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

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

public class Cover<T extends AbstractCoverType>

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

public class Cover<T implements CoverType>

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

接口(interface):

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
}

最佳答案

使用 extends绑定(bind)泛型类型定义时,无论它是类还是接口(interface)。

换句话说,没有 implements在通用类型上层绑定(bind)中 - extends适用于类和接口(interface)。

所以:

public class Cover<T extends CoverType>

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

来自documentation :

Note that [...] extends is used in a general sense to mean either "extends" (as in classes) or "implements" (as in interfaces).

同样值得注意的是,enum s 不能扩展类,因为它们隐式扩展了 java.lang.Enum已经。

关于java - 如何锁定作为枚举的泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39250464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com