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)
使用extends绑定的泛型类型定义时,无论它是一个类或接口.
换句话说,implements泛型类型的上层绑定没有 - extends适用于类和接口.
所以:
public class Cover<T extends CoverType>
...是您正在寻找的解决方案,CoverType您的枚举实现的接口在哪里.
从文档:
请注意,[...]
extends在一般意义上用于表示"扩展"(如在类中)或"实现"(如在接口中).
另外值得注意的是,enums不能扩展类,因为它们已经隐式扩展了java.lang.Enum.
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |