【问题标题】:How throw exception with annotation?如何用注释抛出异常?
【发布时间】:2018-11-19 06:06:50
【问题描述】:

我有一堂课如下:

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方法时,它会检查这个?

如果是,怎么做?

【问题讨论】:

  • 也许使用 bean 验证或 AOP?
  • 都不是,只是简单的类
  • 这更像是一个您可以考虑的选项列表,而不是关于您当前使用什么的问题......
  • 例如什么?
  • 添加一个单行方法调用来做同样的事情我们更简单,更快。还要考虑调试它是多么容易。

标签: java annotations


【解决方案1】:

这是不可能的。 您必须使用@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;
}

【讨论】:

    猜你喜欢
    • 2012-08-05
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    相关资源
    最近更新 更多