如何使用注释引发异常?

时间:2018-11-19 06:06:50

标签: java annotations

我的课程如下:

public class MyClass {
   private String key;

   // Getter And Setter
}

我想限制key的值(例如,它不能有空格字符),为此,我必须按以下方法将setter定义为:

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

    this.key = key;

}

我也在另一个类中使用了此setter,是否可以定义一个注释,当调用setter方法时,它会对此进行检查?

如果是,怎么办?

1 个答案:

答案 0 :(得分:2)

不可能。 您将必须使用@Retention(RetentionPolicy.RUNTIME)编写自己的注释,并编写某种可以通过反射不断检查参数的工具。 这对于参数来说是不可能的,并且不希望经常检查类的每个实例中对该方法的每次调用。

您可以实现类似于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;
}