我在锁定泛型类型时遇到问题。下面是一个由两个枚举类实现的接口。 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
}
答案 0 :(得分:6)
绑定通用类型定义时使用extends
,无论它是类还是接口。
换句话说,泛型类型上部绑定中没有implements
- extends
适用于类和接口。
所以:
public class Cover<T extends CoverType>
...是您正在寻找的解决方案,其中CoverType
是您的枚举实现的界面。
请注意,[...]
extends
在一般意义上用于表示&#34;延伸&#34; (如在课堂上)或&#34;实施&#34; (如在接口中)。
另外值得注意的是,enum
无法扩展类,因为它们已隐式扩展java.lang.Enum。