Есть ли лучший и эффективный способ сделать это:
Я ввожу 2 значения, затем проверяя их в списке, как если бы текущий = три, тогда он возвращает true для проверки на один, два и три
ПРИМЕЧАНИЕ. Эти значения (один, два, три) являются просто заполнителями для примера в моем использовании, между ними нет никакой связи, кроме того, что они имеют другой приоритет.
enum Foo {
ONE(1), TWO(2), THREE(3)
private final int priority;
public Foo(int priority) {this.priority = priority;}
public int getPriority() {return priority;}
}
public boolean checker(Foo current, Foo check) {
if (check == ONE) {
if (current == ONE || current == TWO
|| current == THREE) {
return true;
}
}
if (check == TWO) {
if (current == TWO || current == THREE) {
return true;
}
}
if (check == THREE) {
if (current == THREE) {
return true;
}
}
return false;
}
Я бы выполнил перечисление следующим образом:
enum Foo {
ONE(1), TWO(2), THREE(3);
private final int priority;
private Foo(int priority) {
this.priority = priority;
}
public int getPriority() {
return priority;
}
public boolean check(Foo check) {
return this.getPriority() >= check.getPriority();
}
}
И просто позвоните:
Foo current = Foo.THREE;
System.out.println(current.check(Foo.TWO));
Таким образом, это больше ООП.
Ответ demostene - это способ пойти, если позволяет ваш фактический вариант использования.
При этом следующее является эффективным, понятным и логически эквивалентным коду, который вы опубликовали:
public boolean checker(Foo current, Foo check) {
switch (check) {
case THREE:
if (current == TWO)
return false;
case TWO:
if (current == ONE)
return false;
default:
return true;
}
}
Похоже, вы всегда проверяете, равен ли current
или больше check
. Если да, то вы можете просто использовать ints. Если вам нужно их назвать, вы можете использовать некоторые постоянные ints, такие как public final static int ONE = 1;
,
public boolean checker(int current, int check) {
return current >= check;
}
Если вы хотите ограничить определенные номера, например 1, 2, 3 в вашем примере, сначала проверьте параметры:
public boolean checker(int current, int check) {
int MIN = 1;
int MAX = 3;
if(current < MIN || current > MAX || check < MIN || check > MAX) {
return false;
}
return current >= check;
}
int
, а затем сравнитьif( current > check )