gpt4 book ai didi

java - 方法签名是什么意思?字符串 value() 默认 "";

转载 作者:行者123 更新时间:2023-12-03 02:01:53 28 4
gpt4 key购买 nike

我在 Spring Component 接口(interface)中发现了这个方法签名。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component
{
String value() default "";
}

方法签名 String value() default ""; 是什么意思?我们应该如何以及何时为我们的编码目的定义这样的语法?

最佳答案

这不是方法签名。这意味着您可以将字符串作为参数传递给组件注释,如下所示:

@Component(value = "value")

如果您自己没有指定值,则将使用默认值“”。

如果是这样的话:

String value(); // without the default

value 将是一个强制参数。尝试像这样使用组件:

@Component()

会导致异常,因为您没有提供值。

编辑:何时使用。

如果您不太了解此语法或一般注释,则不应使用它们。关于使用注释可以完成的所有事情,尤其是定制的注释,也可以在没有注释的情况下完成。

假设您想要创建一个注释来验证字段的值。我将使用比利时邮政编码的示例。它们都是 4 位数字,并且在 1000 到 9999 之间。

@Target( {ElementType.FIELD})
@Retention( RetentionPolicy.RUNTIME)
@Constraint( validatedBy = ValidatePostalCodeImpl.class)
public @interface ValidatePostalCode{
String message() default "You have entered an invalid postal code";
Class<?>[] groups() default {}; // needed for the validation
Class<? extends Payload>[] payload() default{}; // needed for the validation

int maxValue() default 9999; // so, by default, this will validate based
int minValue() default 1000; // on these values, but you will be able to
// override these
}

/* 验证实现 */

public class ValidatePostalCodeImpl implements ConstraintValidator<ValidatePostalCode, Integer> {

int upperValue;
int lowerValue;

@Override
public void initialize(ValidatePostalCode validate) {
this.upperValue = validate.maxValue(); // here you call them as if they indeed were regular methods
this.lowerValue = validate.minValue();
}

@Override
public boolean isValid(Integer integer, ConstraintValidatorContext context) {
return integer >= lowerValue && integer <= upperValue;
}

}

/* 用法 */

@Entity
@Table(name = "addresses")
public class Addresses {

// home address -> In Belgium, so has to be between the default values:
@ValidatePostalCode
Integer belgianPostalCode;

// vacation home in another country, let's say the PC's there are between
// 12000 and 50000
@ValidatePostalCode(minValue = 12000, maxValue = 50000)
Integer foreignPostalCode;

}

当然,这是一个非常有限的示例,但它应该能让您有所了解。

关于java - 方法签名是什么意思?字符串 value() 默认 "";,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54285050/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com