我的课程如下:
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方法时,它会对此进行检查?
如果是,怎么办?
答案 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;
}