首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >得到“不包含类型的实例.”错误

得到“不包含类型的实例.”错误
EN

Stack Overflow用户
提问于 2012-03-29 18:43:30
回答 2查看 6.6K关注 0票数 3

有人能告诉我这段代码有什么问题吗?

代码语言:javascript
复制
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导入为AddBoardTestCommand.BoardTestBean.SAT

我不明白为什么当BoardTestBean类是抽象的时候,它要求我初始化它。它只是保存几个子类的值(SAT不是唯一的子类。为了简单起见,我省略了其他部分)。

有人能告诉我怎么回事吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-29 18:46:46

这是因为SAT类是BoardTestBean的内部类,而不是静态的内部类。只有静态内部类可以实例化,而不需要“封闭”实例上下文;非静态类需要“父”实例。

如果SAT不需要使用BoardTestBean的任何状态,则声明它为static;否则,向BoardTestBean添加实例方法并从那里实例化SAT

我假设您是从同一个包访问SAT,因为它具有包的可见性。如果这不是有意的,那么您也需要使类public

编辑这是如何将实例方法添加到BoardTestBean返回SAT

代码语言:javascript
复制
SAT makeSAT() {
    return new SAT();
}

现在,在BoardTestBean之外,您可以这样做:

代码语言:javascript
复制
// assuming that you have an instance of BoardTestBean...
BoardTestBean myBean = ...
BoardTestBean.SAT = myBean.makeSAT();
票数 6
EN

Stack Overflow用户

发布于 2012-03-29 18:48:23

您定义了一个内部类,它将此隐藏到其外部类中。

就这么做

代码语言:javascript
复制
public static class SAT {

然后得到一个嵌套类,而不是隐藏的

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9931479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档