Получение ошибки «Нет включающего экземпляра типа ...» - PullRequest
3 голосов
/ 29 марта 2012

Может кто-нибудь сказать мне, что не так с этим кодом?

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 = новый SAT (); с SAT импортируется как AddBoardTestCommand.BoardTestBean.SAT

Я не понимаю, почему он просит меня инициализировать класс BoardTestBean, когда он является абстрактным. Он предназначен только для хранения значений для нескольких подклассов (SAT - не единственный подкласс. Я просто опустил остальные для простоты).

Может кто-нибудь сказать мне, что не так? Благодарю.

Ответы [ 2 ]

5 голосов
/ 29 марта 2012

Это потому, что класс 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();
2 голосов
/ 29 марта 2012

Вы определили внутренний класс, который скрыл это для своего внешнего класса.

Просто сделай

public static class SAT {

и вы получите вложенный класс без скрытого этого

...