0

an enclosing instance that contains尝试实例化类时出现- 的原因是什么?

下面是我的实际代码:

public static void main(String[] args) {
    InterspecTradeItems_Type.Item_Type item = new InterspecTradeItems_Type.Item_Type();  
    // Error: an enclosing instance that contains InterspecTradeItems_Type.Item_Type is required

}


public class InterspecTradeItems_Type {
    public class Item_Type {

    }
}

谢谢。

4

6 回答 6

2

由于Item_Typeclass 不是静态嵌套类,而是 的内部类InterspecTradeItems_Type,因此您需要后者的实例才能访问前者。

因此,要创建内部类的实例,您应该创建封闭类的实例:

new InterspecTradeItems_Type().new Item_Type(); 

当然,另一种选择是Item_Type上课static

public class InterspecTradeItems_Type {
    public static class Item_Type {

    }
}

然后你的代码就可以正常工作了。

于 2013-09-26T12:35:29.417 回答
2

Item_Type内部阶级一样。要实例化内部类,您必须先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:

InterspecTradeItems_Type.Item_Type item = new InterspecTradeItems_Type().new Item_Type();

于 2013-09-26T12:35:48.137 回答
1

假设InterspecTradeItems_Type在名为 的类中声明/定义Main,您需要

InterspecTradeItems_Type.Item_Type item = new Main(). 
                                new InterspecTradeItems_Type().new Item_Type();  

你有一个内部类和内部类。您需要每个外部类的实例才能访问它。

于 2013-09-26T12:34:58.153 回答
0

要实例化内部类,您必须先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

所以要么使用上述语法,要么使Item_Type静态

public static void main(String[] args) {
    InterspecTradeItems_Type.Item_Type item = new InterspecTradeItems_Type.
                                                                   Item_Type();  
    // Error: an enclosing instance that contains
                               InterspecTradeItems_Type.Item_Type is required

}    
public class InterspecTradeItems_Type {
    public static class Item_Type {

    }
}

阅读有关内部类的文档以获取更多信息。

于 2013-09-26T12:39:18.097 回答
0

尝试

public static void main(String[] args) {
    InterspecTradeItems_Type item = new InterspecTradeItems_Type();
    Item_Type item1 = item.new Item_Type();  

}
于 2013-09-26T12:41:36.633 回答
0

拥有内部类对象的正确方法是

    InterspecTradeItems_Type.Item_Type item = new InterspecTradeItems_Type.new Item_Type();  
于 2013-09-26T12:41:54.063 回答