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方法。@Nacht
BoardTestBean
不是SAT的超类,而是它的封闭类。我编辑了答案,向您展示了一个如何在非静态情况下处理解决方案的示例。Unn,您的答案确实有效,但它使它比我预期的更复杂(最初的想法是使其紧凑,便于将来调试)。无论如何,谢谢。可能的副本可能的副本