2013-04-19 5 views
1

Итак, я работаю над Java-проектом, и один из моих классов использует внутренние вложенные классы (TypesOfQuestions), и когда я пытаюсь добавить вопрос из внутреннего класса в HashMap, он не позвольте мне, и я не уверен, почему.Java Inner Classes and HashMaps

public abstract class TypesOfQuestions { 

Map<String, Double> scores = new TreeMap<String, Double>(); 
String text; 
double points; 

public TypesOfQuestions(String text, double points) { 

} 


public static class TrueFalse extends TypesOfQuestions { 
    public TrueFalse(String text, double points, boolean answer) { 
     super(text, points); 
    } 
}  

И другой класс экзамен, который

public class Exam { 
private String x; 
private Map<Integer, Questions> q; 

public HoldExam(String x) { 
    q = new HashMap<Integer, Questions>(); 
    this.x = x; 
} 

public void addTrueFalseQuestion(int questionNumber, String text, 
           double points, boolean answer){ 
    q.put(questionNumber, new TrueFalse (text, points, answer)); 

} 
} 

Я пробовал кучу разных вещей, но я получаю ошибки, для этого я получил

No enclosing instance of type TypesOfQuestions is accessible. 
Must qualify the allocation with an enclosing instance of type TypesOfQuestions 
(e.g. x.new A() where x is an instance of TypesOfQuestions). 

Anndddd Я понятия не имею, что делать !!

ответ

3

TrueFalse, вероятно, должно быть static, так как оно не связано с внешним экземпляром TypesOfQuestions; его is a TypesOfQuestions.

+0

О нет! подождите, поэтому я изменил его на статический, как вы сказали, и он исправил ошибку, пока я не попытался нажать «Сохранить», а затем ошибка вернулась. Такая же ошибка тоже. – CCC

+0

Где находится здесь раздел 'Вопросы'? У нас нет определения для 'Вопросов'. –

+0

Извините, вопросы должны быть типамиOfQuestions, я просто не вводил их правильно. Кроме того, eclipse, кажется, принимает его, а затем не принимает его ... иногда он иногда вызывает ошибку, а затем не в другое время ... но я не меняю ни одного кода. – CCC

1

Измените свой вложенный класс на статичный, чтобы он не требовал неявной ссылки на внешний класс.

public static class TrueFalse extends TypesOfQuestions { ... } 

Внутренние классы без статический квалификационном разрешен доступ членам внешнего класса. Это требует, чтобы они содержали неявную ссылку на внешний класс.