«@Constructor не применим к конструктору» при попытке аннотировать конструктор с помощью jdk.nashorn.internal.objects.annotations.Constructor - PullRequest
0 голосов
/ 31 марта 2019

Когда я пытаюсь использовать аннотацию jdk.nashorn.internal.objects.annotations.Constructor в конструкторе моего класса, я получаю сообщение об ошибке компиляции:

@ Конструктор не применим к конструктору

Снимок экрана от IntelliJ:

Кто-нибудь знает причину, по которой он показывает эту ошибку?

Упрощенный код:

package passengers;

import jdk.nashorn.internal.objects.annotations.Constructor;
import jdk.nashorn.internal.objects.annotations.Getter;

public class Passenger {

    private String name;
    private Stop destination;

    @Constructor //<-- here I see: @Constructor not applicable to constructor
    public Passenger(String name) {
        //..
    }

    @Getter  //<- this works fine
    public String getName() {
        return name;
    }
}

1 Ответ

1 голос
/ 31 марта 2019

IDEA абсолютно верна в этом.

Когда вы сталкиваетесь с такими ситуациями, первое, что вы должны сделать, это взглянуть на @Constructor аннотацию JavaDoc или source .

/**
 * Specifies a specific method to be the JavaScript "constructor" function.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Constructor { ... }

Это

@Target(ElementType.METHOD)

означает, что для методов можно указать аннотацию.
Если бы она была совместима с конструкторами, вы бы нашли

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})

В любом случае это происходит из пакета internal, поэтому вам, вероятно, не следует его использовать.

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