Ошибка: запрос на создание нового класса при доступе к внутреннему классу

Я пытаюсь получить доступ к внутреннему классу Class1, определенному в ClassA из ClassB

ClassB.java

public class ClassB implements Initializable {
    public ClassA[] QR;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        for(int i=0; i<1; i++)
        {
            //QR[i] = new ClassA(i);
            QR[i].Class1 class1obj = QR[i].new Class1();

            //prog_QR[i].progressProperty().bind(QR[i].progressProperty());
            prog_QR[i].progressProperty().bind(class1obj.progressProperty());
            //lab_QR[i].textProperty().bind(QR[i].messageProperty());
            lab_QR[i].textProperty().bind(class1obj.messageProperty());
            // My other stuff here
        }
    } 
}

ClassA.java

public class ClassA {    
    public class Class1 extends Task<Integer> {
      // Constructor Created
       Class1() {
        throw new UnsupportedOperationException("Not supported yet."); //To change  body of generated methods, choose Tools | Templates.
    }
       @Override
       protected Integer call() throws Exception {
           // My logic here
       }
    }
}

На линии QR[i].Class1 class1obj = QR[i].new Class1();, Я получаю сообщение об ошибке в Netbeans, и он либо просит меня

1) Создать класс "Class1" в пакете mypackage

2) Создать класс "Class1" в mypackage

Что я здесь не так делаю?

1 ответ

Когда вы объявляете переменную, часть слева от имени переменной должна быть именем типа.

QR[i].Class1

не имя класса QR[i] это значение в массиве. Для каждого значения в массиве нет другого класса. Ты хочешь:

ClassA.Class1 class1obj = QR[i].new Class1();

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

Кроме того, ваши объявления класса не работают. Эти:

public ClassA {
...
public ClassB {

нужно быть:

public class ClassA {
...
public class ClassB {

В качестве законченного примера этот код прекрасно компилируется:

public class ClassA {
    public class Class1 {}
}

public class ClassB {    
    public ClassA[] QR = new ClassA[1];

    public void foo() {
        QR[0] = new ClassA();
        ClassA.Class1 class1obj = QR[0].new Class1();
    }
}
Другие вопросы по тегам