Ошибка: запрос на создание нового класса при доступе к внутреннему классу
Я пытаюсь получить доступ к внутреннему классу 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();
}
}