【发布时间】:2015-11-23 12:32:46
【问题描述】:
我有一个类产品。每个产品可以有任意数量的类别:
public class Product
{
private List<Category> categories
...
}
每个类别都有自己独特的子类别集。例如:
- “红色”类别包含“栗色”、“橙色”、“波尔多”子类别
- “蓝色”类别包含“浅色”、“深色”、“天蓝色”子类别
对于每组子类别,我创建了一个带有可能静态值的枚举:
public enum RedSubCategory
{
MAROON, ORANGE, BORDEAUX;
}
public enum BlueSubCategory
{
LIGHT, DARK, AZURE;
}
我现在正在努力创建 Category 类。因为每个类别都有明确的定义,所以我想将其设为枚举。但是,每个枚举值都应该有一个不同子类型的子类别列表,这是行不通的:
public enum Category
{
RED, BLUE;
private List<SubCategory> subCategories;
// This won't work! SubCategory is not a real class and the
// SubCategory enums can't extend from a common supertype!
public setSubCategories(List<SubCategory> subCategories)
{
this.subCategories : subCategories;
}
}
如果我将 Category 设为类而不是枚举,我会遇到同样的问题。我可以使用泛型解决这个问题,但我失去了所有可能类别的静态定义。此外,我如何使类别 RED 是唯一可以使用 RedSubCategories 的类别?通过使用具有泛型的类,没有什么能阻止我创建具有“蓝色”类别和红色子类别的类别对象!
我可以在这里使用任何模式或继承/泛型技巧吗?
【问题讨论】:
标签: java generics inheritance enums domain-model