Как @JonSkeet прокомментировал, вы можете отправить экземпляр IllegalArgumentException
. Тем не менее, я не могу найти способ перевести the way to force
.
void giveMeZeroOneOrTwo(final int value) {
if (value != 0 && value != 1 && value != 2) {
throw new IllegalArgumentException("unacceptable value: " + value);
}
// now you can read the method name, huh?
}
or Bean Validation
может работать на вас.
void giveMeZeroOneOrTwo(@Min(0) @Max(2) final int value) {
}
Ну, используя enum, возможно, хороший подход, и мне это понравится.
enum Magic {
ONE(1),
TWO(2),
THREE(3);
public static Magic valueOf(int value) {
for (final Magic v : values()) {
if (v.value == value) {
return v;
}
}
throw new IllegalArgumentException("undefined value: " + value);
}
private Magic(int value) {
this.value = value
}
private final int value;
}
Теперь метод, который принимает int
может быть проверена.
void giveMeOneTwoOrThree(final int value) {
// still throws an IllegalArgumentException
final Magic magic = Magic.valueOf(value);
}
Вы всегда можете выбросить 'IllegalArgumentException', если аргумент недействителен, конечно. –
Вы можете использовать AOP (Aspect Oriented Programming), например, библиотеку AspectJ: создать некоторую аннотацию, которая указывает, что один из аргументов должен быть ограничен, и создать точку соединения, которая соответствует этой аннотации, и создать Совет, который проверяет значение. Однако - это будет выполнять только проверку времени выполнения. Если вам нужно статическое, время компиляции, проверка, вам нужно создать свой собственный тип данных. –