无法初始化空白的最终字段

时间:2016-05-30 11:51:38

标签: java spring scope annotations

我在寻找答案时发现了类似的问题,但是,他们都没有回应我的要求。

我创建了一个模特'会议'

@Entity
@Scope("prototype")
@Table(name="MEETINGS")
public class Meeting {



@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;

@NotEmpty
@Column(name="name", nullable=false)
private String name;

@NotEmpty
@Column(name="description", nullable=false)
private String description;

@NotEmpty
@Column(name="allowStartStopRecording", nullable=false)
private String allowStartStopRecording;

@NotEmpty
@Column(name="autoStartRecording", nullable=false)
private String autoStartRecording;

@NotEmpty
@Column(name="record", nullable=false)
private String record;

@NotEmpty
@Column(name="voiceBridge", nullable=false)
private String voiceBridge;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getAllowStartStopRecording() {
    return allowStartStopRecording;
}

public void setAllowStartStopRecording(String allowStartStopRecording) {
    this.allowStartStopRecording = allowStartStopRecording;
}

public String getAutoStartRecording() {
    return autoStartRecording;
}

public void setAutoStartRecording(String autoStartRecording) {
    this.autoStartRecording = autoStartRecording;
}

public String getRecord() {
    return record;
}

public void setRecord(String record) {
    this.record = record;
}

public String getVoiceBridge() {
    return voiceBridge;
}

public void setVoiceBridge(String voiceBridge) {
    this.voiceBridge = voiceBridge;
}


}

并尝试创建DAO' MeetingDAO',

public interface MeetingDAO {

Meeting meeting;

String createMeeting();

String deleteMeeting();

String getMeetings();

String updateMeeting();
}

我收到以下错误:空白的最终字段会议可能尚未在包含会议会议的行中初始化;

提前谢谢。

2 个答案:

答案 0 :(得分:3)

您正尝试在界面中声明成员变量:

public interface MeetingDAO {

    Meeting meeting;

您无法在接口中声明成员变量。成员meeting会自动生成public static final(即常量)并且您没有初始化它。

请勿在{{1​​}}界面中声明meeting。如果需要声明类型为MeetingDAO的成员变量,请在实现该接口的类中执行。但坦率地说,如果Meeting的实现具有MeetingDAO类型的成员变量,那将是奇怪的 - 所以你可能根本不应该有这个成员变量。

(另外,为什么界面中的所有方法都返回Meeting并且没有接受任何参数?这看起来不太符合逻辑。)

答案 1 :(得分:1)

请查看:https://docs.oracle.com/javase/tutorial/java/IandI/interfaceDef.html

据说:

  

接口中定义的所有常量值都是隐式公共的,   静态的,最后的。再一次,您可以省略这些修饰符。

因此接口Meeting meeting;中的变量声明MeetingDAO原来是:public static final Meeting meeting;你没有初始化它。这就是你得到的原因:blank final field meeting may not have been initialized编译错误。

您的界面MeetingDAO可能如下所示(其他变体也可能):

import java.util.List;

public interface MeetingDAO {

    void createMeeting(Meeting meeting);

    Meeting getMeeting(long meetingId);

    void deleteMeeting(long meetingId);

    List<Meeting> getMeetings();

    void updateMeeting(Meeting meeting);
}

您怎么看?