我正在尝试为Java应用程序创建一个声音包,该声音包可以通过设置热插拔。我坚持的部分是能够迫使新的声音包遵守合同并实施每个现有Enum的能力。例如:
public enum AudioFX {
ERROR,
SUCCESS,
NOT_FINISHED,
TIMED_OUT,
ITEM_NOT_SELECTED
}
我将这些值映射到Android中的Raw资源,如下所示:
EnumMap<AudioFX,Integer VoicePack = new EnumMap<>(AudioFX.class);
VoicePack.put(AudioFX.ERROR, R.raw.voice_error);
VoicePack.put(AudioFX.SUCCESS, R.raw.voice_success);
VoicePack.put(AudioFX.NOT_FINISHED, R.raw.voice_not_finished);
不幸的是,如果我为不同的声音包创建一个新的EnumMap,我想不出一种方法来确保在编译时考虑到每个Enum。我该怎么做才能强制执行此约束?我有可以忽略的其他模式吗?
最佳答案
也许某些静态代码分析工具可以在这里提供帮助。
绝对有效的方法:通用单元测试。您始终可以查询枚举的常量,然后“仅”必须确保通过通用单元测试检查了每个EnumMap实例。
含义:您可以编写一个小的帮助程序实用程序,以检查EnumMap实例中是否显示了枚举X的所有枚举常量。