我有以下带有父类的结构,几个子类,每个子类都有自己的枚举和各种键。父类需要具有具有以枚举为特征的键的映射,但枚举类型是抽象的 - 它由实例化的子类确定。
我想使用泛型类型来要求Enum类型来自该特定类 - 因此您只能将APPLE添加到水果中,将芹菜添加到蔬菜中,反之亦然。我的应用程序还要求任何 Food 对象能够查询其可能的类型(例如,打印出所有可能的类型,而不仅仅是我们在 Map 中的类型)。
我如何使用泛型类型来实现这一切呢?我在带有EnumSet声明的行上遇到编译器错误< code >不可编译的源代码-类型参数E不在类型变量E的界限内。
import java.util.*;
public class sandbox {
private static class Food<E extends Enum> {
public Map<E, Integer> qty = new HashMap<>();
public EnumSet<E> types = EnumSet.allOf(E);
}
private static class Fruit extends Food<Fruit.Type> {
public static enum Type {
APPLE,
ORANGE
}
}
private static class Veggie extends Food<Veggie.Type> {
public static enum Type {
CUCUMBER,
CELERY
}
}
public static void main(String[] args) throws Exception {
Fruit mondays = new Fruit();
mondays.qty.put(Fruit.Type.APPLE, 1);
mondays.qty.put(Fruit.Type.ORANGE, 3);
Veggie tuesdays = new Veggie();
tuesdays.qty.put(Veggie.Type.CELERY, 10);
mondays.qty.forEach((f, qty) -> System.out.println("Buying " + f + " in qty " + qty));
tuesdays.qty.forEach((f, qty) -> System.out.println("Buying " + f + " in qty " + qty));
mondays.types.forEach(System.out::print);
}
}
我将利用Enum可以实现接口的事实,使用接口作为<code>食物</code>的类型约束,而不是<code>Enum
java prettyprint-override"> private static interface FoodType {}
private static abstract class Food<T extends FoodType> {
public Map<T, Integer> qty = new HashMap<>();
protected abstract Set<T> getTypes();
}
private static class Fruit extends Food<Fruit.Type> {
public static enum Type implements FoodType {
APPLE,
ORANGE
}
@Override
protected Set<Type> getTypes() {
return EnumSet.allOf(Type.class);
}
}
private static class Veggie extends Food<Veggie.Type> {
public static enum Type implements FoodType {
CUCUMBER,
CELERY
}
@Override
protected Set<Type> getTypes() {
return EnumSet.allOf(Type.class);
}
}
如果您想更加DRY并避免在每个子类中实现getTypes()
,您可以将受保护的构造函数添加到Food
并传入Class
,每个子类构造函数设置适当的FoodType
类。
问题内容: 我的Java模型上有一个枚举类型,我想映射到数据库中的表。我正在使用“hibernate注释”,但我不知道该怎么做。由于我搜索的答案比较旧,我想知道哪种方法最好? 提前致谢 问题答案: 除了注释,您还需要其他东西吗?例如,以下枚举: 可以这样使用和注释: 您可以使用批注的enum属性指定枚举应如何在数据库中持久化。指定该枚举将作为整数值保留。在这里,设置为将永久保存为0,保留为1,依此
我有一个场景,我必须使用Mapstrt将对象(来自网络请求)转换为对象(数据层)来处理对象映射。我正在尝试创建一个通用的接口,以防止必须为每个资源定义自定义映射器,如下所示: 但这会导致构建错误(但是编译成功): 错误:(13,4)错误:无法为泛型类型变量源生成映射方法。 这不可能吗?如果没有,我将不得不为每个创建一个自定义映射器,并使用根据类类型等告诉反序列化器要使用哪个映射器。。。它可能会变得
问题内容: 我的Java模型上有一个枚举类型,我想映射到数据库中的表。我正在使用休眠注释,但我不知道该怎么做。由于我搜索的答案比较旧,我想知道哪种方法最好? 提前致谢 问题答案: 除了注释,您还需要其他东西吗?例如,以下枚举: 可以这样使用和注释: 您可以使用批注的enum属性指定枚举应如何在数据库中持久化。指定该枚举将作为整数值保留。在这里,设置为将永久保存为0,保留为1,依此类推。 替代方法是
非常感谢您在广告方面的帮助。! 使用枚举类型的扫描仪时出错。然而,我不允许在这个任务中使用Buffer(InputStreamReader)。围绕它最好的工作是什么? 我收到以下错误: 代码: import java.util.Scanner; 公开课申请{ }
问题内容: 我想到的是一个涉及嵌套枚举的数据结构,因此我可以执行以下操作: 如果有方法声明: 然后我可以说(适当): 这是我想出的: 和界面: 我想我只是想用Java来完成这种事情的最佳方法,或者是否需要编写一堆if语句来处理单个Drink.values()。有什么帮助吗? 问题答案: 首先,您提供的示例代码在某种程度上违反了“德米特律”-因为COLUMBIAN实例字段仅用于检索标签。同样,通过这
从这个问题,有可能注入map与枚举? 例如,我有枚举: 我有一些与实现的接口: 但这样的注入不起作用: 我想自动注入。如何修复它,在spring框架端生成这样的代码?