Использование констант для параметров аннотации в Java - PullRequest
0 голосов
/ 01 декабря 2018
  1. Почему он должен быть определен как общедоступный статический финал?

  2. Почему я должен импортировать их, так как они определены в текущемclass?

Это потому, что в @interface вы можете использовать только открытые статические конечные поля?

И должен ли импорт что-то делать с оптимизацией?

т.е.

**import static db.Rezervare.FINDALL;**
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

@Entity
@Table(name = "rezervari")
@NamedQueries(
        @NamedQuery(name = **FINDALL**, query = "SELECT r FROM Rezervare r ORDER BY r.nume")
)
public class Rezervare {

    **public static final String FINDALL = "Rezervare.findAll";**

1 Ответ

0 голосов
/ 01 декабря 2018

Поскольку значения аннотаций интерпретируются компилятором, а не во время выполнения, они должны быть константами времени компиляции;FINDALL не обязательно должно быть public, но оно должно быть static final, чтобы сделать его константой.

Технически аннотация находится вне класса, к которому она применяется, поэтому классчлен не внутри.Теоретически вы можете иметь несколько определений классов в одном файле (JLS рекомендует, чтобы компиляторы запрещали это, и все известные мне компиляторы Java), и поэтому требуется конкретное имя.

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