Как выкинуть исключение с аннотацией? - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть класс следующим образом:

public class MyClass {
   private String key;

   // Getter And Setter
}

Я хочу ограничить значение key (например, оно не может содержать пробел), для этого я должен определить как установщик следующим образом:

public void setKey(String key)
{
    if(key.indexOf(" ") != -1)
      throw new RuntimeException("");

    this.key = key;

}

Я использовал этот сеттер и в другом классе. Можно ли определить аннотацию, которая при вызове метода сеттера проверяла это?

Если да, то как?

1 Ответ

0 голосов
/ 19 ноября 2018

Это невозможно. Вам нужно написать свою собственную аннотацию с @Retention(RetentionPolicy.RUNTIME) и написать какой-нибудь инструмент, который бы постоянно проверял параметр через Reflection. Это невозможно для параметров, и также нежелательно постоянно проверять каждый вызов этого метода в каждом экземпляре вашего класса.

Вместо того, чтобы пытаться решить эту проблему с помощью аннотации, вы можете реализовать некоторый служебный класс, подобный Objects:

public final class Strings {

    /**
     * Utility classes should not be instantiated.
     */
    private Strings() {}

    public static void requireWhiteSpace(String value) {
        if (value == null || value.indexOf(" ") != -1) {
            throw new IllegalArgumentException("Value should contain a white space character!")
        }
    }
}

, а затем используйте его так:

public void setKey(String key) {
    Strings.requireWhiteSpace(key);
    this.key = key;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...