Что означает метод подписи?Строковое значение () по умолчанию ""; - PullRequest
0 голосов
/ 21 января 2019

Я наткнулся на сигнатуру этого метода в интерфейсе Spring Component.

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

Что означает сигнатура метода String value() default "";? Как и когда мы должны определять такой синтаксис для наших целей кодирования?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Ключевое слово @interface используется для определения аннотации.Эта аннотация имеет свойство с именем value, которое можно указать явно:

@Component(value = "myValue")

Или в сокращенной форме:

@Component("myValue")

Если вы не укажете valueпо умолчанию будет "", как определено ключевым словом default.

0 голосов
/ 21 января 2019

Это не сигнатура метода.это означает, что вы можете передать String как параметр в аннотацию Component, например так:

@Component(value = "value")

Если вы не укажете свое значение, будет использовано значение по умолчанию "".

Если бы это было так: значение

String value(); // without the default

было бы обязательным параметром.Попытка использовать Компонент как это:

@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;

}

Конечно, это очень ограниченный пример, но он должен дать вам представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...