我定义了自定义注释(DataAttribute),如下所示。 我必须多次调用checkMaxLength(),超过10,000次。 (还有toolType,reportTitle和validLength)
我想问的是......
我认为a)是自定义注释的正确(或一般)用法。但如果我调用checkMaxLength超过10,000次(并且maxLength总是4000),那么与b)相比,它的性能不佳。
您如何看待案例b)? 这是使用自定义数据注释的正确方法吗?
a)
@DataAttribute(toolType = DataTooltype.CustomDateTime, reportTitle = "DateTime", maxLength = 4000, validLength = 4000, pollutedLength = 100)
public class DateTimeData {
public boolean checkMaxLength(int length) {
if (DataAnnotationUtil.maxLength(this) < length)
return false;
return true;
}
}
b)
@DataAttribute(toolType = DataTooltype.CustomDateTime, reportTitle = "DateTime", maxLength = 4000, validLength = 4000, pollutedLength = 100)
public class DateTimeData {
public int maxLength;
public Email() {
this.maxLength = DataAnnotationUtil.maxLength(this);
}
public boolean checkMaxLength(int length) {
if (this.maxLength < length)
return false;
return true;
}
}
答案 0 :(得分:1)
注释对方法执行的性能没有影响。如果你的问题是DataAnnotationUtil.maxLength(this)
,那么在构造函数中调用它一次,而不是每次调用方法都显然更有效。但由于注释是静态类数据,因此每个类调用一次更有效。由于您的方法需要this
作为参数,我不知道它是否在静态上下文中工作,但您无论如何都不需要它:
@DataAttribute(toolType = DataTooltype.CustomDateTime, reportTitle = "DateTime", maxLength = 4000, validLength = 4000, pollutedLength = 100)
public class DateTimeData {
public static final int MAX_LENGTH = DateTimeData.class.getAnnotation(DataAttribute.class).maxLength();
public DateTimeData() {
}
public boolean checkMaxLength(int length) {
return length < MAX_LENGTH;
}
}
但它更容易,因为根本不需要任何运行时操作。 MAX_LENGTH
是一个编译时常量(所有注释值都是),因此您可以将它在类中声明为常量,并让注释引用它。然后您不需要处理注释:
@DataAttribute(toolType = DataTooltype.CustomDateTime, reportTitle = "DateTime",
// note the reference here, it’s still a single point of declaration:
maxLength = DateTimeData.MAX_LENGTH, validLength = 4000, pollutedLength = 100)
public class DateTimeData {
public static final int MAX_LENGTH = 4000;
public DateTimeData() {
}
public boolean checkMaxLength(int length) {
return length < MAX_LENGTH;
}
}