在Java中使用常量作为注释参数

时间:2018-12-01 18:49:06

标签: java reflection annotations

  1. 为什么必须将其定义为public static final?

  2. 为什么我必须导入它们,因为它们已在当前类中定义?

是因为在@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 :(得分:0)

因为注释值是由编译器而不是在运行时解释的,所以它们必须是编译时常量; FINDALL不必为public,但必须为static final才能使其恒定。

注释本身在技术上不在其所应用的类的外部,因此该类的成员不在其内部。从理论上讲,您可以在一个文件中有多个类定义(JLS建议编译器禁止这样做,而我所知道的所有Java编译器都禁止这样做),因此需要特定名称。