我正在寻找一种限制类属性大小的方法。用户可以创建新实例,我想限制某些String属性必须具有n到m个字符,或者另一个Integer属性必须是某个范围内的整数。
我在类定义中没有找到任何实现此目的的方法,是否需要定义我的方法,如:
public String checkInput (String input, int length) {
if (input.length() > length) {
return input.substring(0, length);
} else return input;
}
答案 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表示字符串