限制类的属性大小

时间:2018-12-03 15:20:05

标签: java

我正在寻找一种限制类属性大小的方法。用户可以创建新实例,我想限制某些String属性必须具有n到m个字符,或者另一个Integer属性必须是某个范围内的整数。

我在类定义中没有找到任何实现此目的的方法,是否需要定义我的方法,如:

public String checkInput (String input, int length) {
   if (input.length() > length) {
      return input.substring(0, length);
   } else return input;
}

4 个答案:

答案 0 :(得分:4)

您可以在if条件内抛出此异常:

throw new InvalidParameterException(MessageFormat.format("Insufficient param {0}!", param)));

答案 1 :(得分:0)

当实例化对象时,也许可以在构造函数中执行检查。您可以设置字段final,以便用户在构造函数完成后无法更改它们。像这样:

public class yourClass {
    private final String data;

    public yourClass(String input) {
        data = input.substring(0, 100);
        // maybe log that the input is being truncated

        // or maybe throw new IllegalArgumentException
    }

    public String getData() {
        return data;
    }

    // no setter = data is immutable
}

在上面的示例中,字符串data的最大大小限制为仅100个字符。如果要阻止从太大的输入创建对象,也可以从构造函数中引发异常。

答案 2 :(得分:0)

OOP方法:定义自己的类来表示该类型,例如:

public abstract class LengthRestrictedString {
  abstract int getMaxLength(); 

  private final String content;
  protected LengthRestrictedString(String content) {
    if (content!=null) {
     if (content.length() > getMaxLength()) {
       throw some exception;
     }
     this.content = content;

然后您可以创建实现该 abstract 方法以提供特定长度的特定子类,例如:

public class PropertyString extends LengthRestrictedString {
  @Override 
  final int getMaxLength() { return 25; }
  ... constructor

或类似的东西。现在,您可以在所有想要/期望长度受限制的字符串的地方使用类PropertyString

答案 3 :(得分:0)

听起来像是用于bean验证的工作:https://beanvalidation.org/2.0/spec/#builtinconstraints 例如@Min @Max表示整数,@ Pattern表示字符串