在Java中通过枚举值参数化类型?

在Java中通过枚举值参数化类型?,java,generics,generic-programming,type-safety,Java,Generics,Generic Programming,Type Safety,我正在研究用枚举值对Java中的泛型类进行参数化,以提高类型安全性,并进行一些编译时检查(我知道泛型参数是在运行时重新设置的) 营业场所 使用表单的枚举(来自外部依赖项,我无法更改) 枚举车辆类型{ 汽车(1), 摩托车(2), 自行车(3); int-id; 车辆类型(int n){ id=n; } } 目标 我想表达以下几点: /*vvvv------------这里是伪代码*/ 班级清单{ 私人整数金额; 库存(int n){ 如果(n

我正在研究用枚举值对Java中的泛型类进行参数化,以提高类型安全性,并进行一些编译时检查(我知道泛型参数是在运行时重新设置的)

营业场所 使用表单的枚举(来自外部依赖项,我无法更改)

枚举车辆类型{
汽车(1),
摩托车(2),
自行车(3);
int-id;
车辆类型(int n){
id=n;
}
}
目标 我想表达以下几点:

/*vvvv------------这里是伪代码*/
班级清单{
私人整数金额;
库存(int n){
如果(n<0)抛出新异常();
金额=n;
}
int getAmount(){return amount;}
//这是我们将获得一些东西的关键部分
//从编译时类型检查
库存添加(库存项目){
返回新库存(this.getAmount()+items.getAmount());
}
}
现在,很明显,当枚举的定义编译时,我的问题所涉及的第二个代码块不能编译(这就是我为什么要问的原因)

类型安全问题来自于在类型级别隐式匹配库存项的“单位”或“类型”(在本例中),在编译时捕获不匹配

按照惯例,如果我定义了一个字段<代码>私家车类型vt并在构造函数中显式设置,我必须检查方法
add(…)
中的匹配类型,并抛出一个需要在其他地方处理的异常

问题 主要问题 我能在Java8中获得这种预想的类型安全性吗?有这样一个成语吗(最好不要用太多的样板)

奖金问题
在Java 11中可能吗?

哪里需要泛型?如果您的
Inventory
仅支持
VehicleType
,则只需删除所有泛型信息并使用
VehicleType
代替
VT
。任何
VehicleType
都已经是
VehicleType
的“成员”,您只需确保不允许
null
。我不确定您想说什么,您不能使用
Inventory
。请注意,枚举成员不是类型;它们是枚举类型的实例(对象)。因为它们不是类型,所以不能将它们用作类型参数的参数。所以,在Java8和Java11中都不可能,因为这是基于误解。