Если сопоставление один на один для бренда и двигателя, вы можете сделать что-то вроде этого:
enum Brand {
MINI(Engine.LEVEL1),
FERRARI(Engine.LEVEL2),
PAGANI(Engine.LEVEL3);
private final Engine engine;
private Brand(Engine engine) {
this.engine = engine;
}
public final Engine getEngine() {
return engine;
}
}
Другой вариант:
enum Brand {
MINI(false, false),
FERRARI(true, true),
PAGANI(false, true);
private final boolean superCar;
private final boolean crazyGood;
private Brand(boolean superCar, boolean crazyGood) {
this.superCar = superCar;
this.crazyGood = crazyGood;
}
public final Engine getEngine() {
if (superCar) {
return (crazyGood) ? Engine.LEVEL1 : Engine.LEVEL2;
}
return Engine.LEVEL3;
}
}
Если сопоставление неодин-к-одному, и вам нужно как-то динамически рассчитать движок на основе некоторых параметров, вы также можете использовать это:
enum Brand {
MINI {
@Override
public Engine getEngine(boolean superCar, boolean crazyGood) {
return (superCar && crazyGood) ? Engine.LEVEL1 : Engine.LEVEL2;
}
},
FERRARI {
@Override
public Engine getEngine(boolean superCar, boolean crazyGood) {
return superCar ? Engine.LEVEL1 : Engine.LEVEL3;
}
},
PAGANI {
@Override
public Engine getEngine(boolean superCar, boolean crazyGood) {
return Engine.LEVEL3;
}
};
public abstract Engine getEngine(boolean superCar, boolean crazyGood);
}
или что-то вроде этого, где у вас есть некоторые значения по умолчанию и переопределение только для особых случаев:
enum Brand {
MINI,
FERRARI {
@Override
public Engine getEngine(boolean superCar, boolean crazyGood) {
return superCar ? Engine.LEVEL1 : Engine.LEVEL3;
}
},
PAGANI;
public Engine getEngine(boolean superCar, boolean crazyGood) {
return Engine.LEVEL3;
}
}
Существует множество возможностей использования только перечислений, которые я на самом деле предпочитаю усложнять в операторах if / else или switch.Конечно, это зависит от того, что именно вы хотите сделать, и так как не так много информации, я не могу дать лучший ответ.Надеюсь, что это поможет вам.