有谁能告诉我这段代码有什么问题?
public abstract class BoardTestBean{
protected String month;
protected String day;
protected String name;
public String getMonth() {
return month;
}
public void setMonth(String month) {
this.month = month;
}
public String getYear() {
return day;
}
public void setYear(String day) {
this.day = day;
}
public String getName(){
return name;
}
//Classes
public class SAT {
boolean pre2005=false;
private String verbal;
private String quantitative;
private String writing="";//if pre-2005, do not set. It is not used.
public SAT() {
super();
if(pre2005)
name="SAT (pre 2005)";
else
name="SAT";
}
public SAT(String verbal, String quantitative, String writing) {
super();
this.verbal = verbal;
this.quantitative = quantitative;
if(writing!=null && !writing.isEmpty())
this.writing = writing;
else
pre2005=true;
if(pre2005)
name="SAT (pre 2005)";
else
name="SAT";
}
public String getVerbal() {
return verbal;
}
public void setVerbal(String verbal) {
this.verbal = verbal;
}
public String getQuantitative() {
return quantitative;
}
public void setQuantitative(String quantitative) {
this.quantitative = quantitative;
}
public String getWriting() {
if(!this.pre2005)
return writing;
else
return "";
}
public void setWriting(String writing) {
this.writing = writing;
}
public boolean isPre2005() {
return pre2005;
}
public void setPre2005(boolean pre2005) {
this.pre2005 = pre2005;
}
}
}
一直说:
没有封闭AddBoardTestCommand.BoardTestBean类型的实例 无障碍。必须使用附加的实例来限定分配 输入AddBoardTestCommand.BoardTestBean(例如x.new A(),其中x是 AddBoardTestCommand.BoardTestBean的实例。
当我尝试这样做时:
SAT bean = new SAT();
将SAT导入为AddBoardTestCommand.BoardTestBean.SAT
我不明白为什么要它在抽象时初始化BoardTestBean
类。它只是为几个子类保存值(SAT不是唯一的子类。为简单起见,我只省略了其他子类)。
谁能告诉我什么是错的?谢谢。
答案 0 :(得分:5)
这是因为SAT
类是BoardTestBean
的内部类,而不是静态内部类。只有静态内部类才能在没有“封闭”实例上下文的情况下实例化;非静态需要一个“父”实例。
如果SAT
不需要使用任何BoardTestBean
的状态,请声明static
;否则,将实例方法添加到BoardTestBean
并从那里实例化SAT
。
P.S。我假设您从同一个软件包访问SAT
,因为它具有软件包可见性。如果这不是故意的,您还需要制作课程public
。
编辑以下是向BoardTestBean
SAT
添加实例方法的方法:
SAT makeSAT() {
return new SAT();
}
现在在BoardTestBean
之外你可以这样做:
// assuming that you have an instance of BoardTestBean...
BoardTestBean myBean = ...
BoardTestBean.SAT = myBean.makeSAT();
答案 1 :(得分:2)
你定义了一个内部类,它隐藏了它的外部类。
只做
public static class SAT {
你得到一个没有隐藏的
的嵌套类