错误:在访问内部类时要求创建新类

时间:2014-04-02 17:41:42

标签: java inner-classes

我正在尝试从ClassB

访问ClassA中定义的内部类Class1

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)创建课程&#34; Class1&#34;在包mypackage中

2)创建课程&#34; Class1&#34;在mypackage中

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

声明变量时,变量名左侧的部分必须是类型名称。

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();
    }
}