Так как, похоже, вы все равно будете жестко кодироваться, почему бы не иметь что-то вроде
public static Bar responseBar(Foo f) {
switch(f) {
case A: return Bar.Alpha;
// ... etc
}
}
для каждого перечисления? Похоже, что у вас есть некоторые дублирующие ответы в вашем примере, так что вы даже можете воспользоваться случаями, которые проваливаются.
EDIT:
Мне нравится предложение Tom's EnumMap; I считает, что производительность , вероятно, выше на EnumMap, но такая элегантная конструкция, описанная в Effective Java, по-видимому, не предоставляется этой конкретной проблемой - однако предлагаемое выше решение коммутатора будет хорошим способ построить два статических EnumMaps, тогда ответ может быть примерно таким:
public static Bar response(Foo f) { return FooToBar.get(f); }
public static Foo response(Bar b) { return BarToFoo.get(b); }