Java 得到一个;没有类型为“的封闭实例”;错误
谁能告诉我这个代码有什么问题吗Java 得到一个;没有类型为“的封闭实例”;错误,java,object,subclass,abstract,Java,Object,Subclass,Abstract,谁能告诉我这个代码有什么问题吗 public abstract class BoardTestBean{ protected String month; protected String day; protected String name; public String getMonth() { return month; } public void setMonth(String month) { this.m
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的实例)
当我尝试这样做时:
satbean=新的SAT();
将SAT导入为AddBoardTestCommand.BoardTestBean.SAT
我不明白为什么它要求我在抽象时初始化BoardTestBean
类。这意味着只保存几个子类的值(SAT不是唯一的子类,为了简单起见,我省略了其他子类)
谁能告诉我怎么了?谢谢 这是因为
SAT
类是BoardTestBean
的内部类,而不是静态内部类。在没有“封闭”实例上下文的情况下,只能实例化静态内部类;非静态需要一个“父”实例
如果SAT
不需要使用任何BoardTestBean
的状态,则将其声明为static
;否则,将实例方法添加到BoardTestBean
并从那里实例化SAT
另外,我假设您从同一个包访问SAT
,因为它具有包可见性。如果这不是有意的,您还需要将类公开
编辑这是如何将实例方法添加到BoardTestBean
返回SAT
:
SAT makeSAT() {
return new SAT();
}
现在,在BoardTestBean之外,您可以执行以下操作:
// assuming that you have an instance of BoardTestBean...
BoardTestBean myBean = ...
BoardTestBean.SAT = myBean.makeSAT();
您定义了一个内部类,该类对其外部类具有隐藏属性
照办
public static class SAT {
您得到的嵌套类没有隐藏this“如果它不使用BoardTestBean的任何状态”是什么意思?它使用超类中的变量name
。它还使用getMonth和getYear方法。@NachtBoardTestBean
不是SAT的超类,而是它的封闭类。我编辑了答案,向您展示了一个如何在非静态情况下处理解决方案的示例。Unn,您的答案确实有效,但它使它比我预期的更复杂(最初的想法是使其紧凑,便于将来调试)。无论如何,谢谢。可能的副本可能的副本