3

假设我有一个内部类 B,我将在外部类的一个成员函数中创建一个实例,有没有一种方法可以在不创建外部类实例的情况下做到这一点?

非常感谢。

class A {
    class B {

    }

    public void function() {
       // create an instance of B, normally have to create a 
       // instance of A to be bond to by b
       B b = new B();
    }
}
4

5 回答 5

2

你这样做的唯一方法是声明B static

class A {
    static class B {

这意味着B没有A与之关联的实例,并且可以在没有可用的外部实例的上下文中实例化。

也就是说,您当前的代码可以按原样编译(因为function()是 non- static,所以在这种情况下一个可用的实例A)。

于 2013-04-12T05:59:32.847 回答
1

您可以从类似的class B外部创建对象class A

B b = 新 A().新 B();

但是在这里,您正在创建外部类的实例,然后创建内部类的实例。如果不创建外部类的实例,就不可能创建内部对象。

但是,如果您的内部阶层是,static那么您就可以做到。

class A {
    static class B {

    }
}
class C{
   public void test(){
       B b = new B();
   }
}
于 2013-04-12T06:02:58.880 回答
0

如果您在外部类的方法中访问嵌套/内部类,则不需要创建外部类的实例。

于 2013-04-12T06:01:13.840 回答
0

您可以直接创建class B内部成员函数的实例class A。实际上class B就像一个成员(A的变量/函数) if Class A。它可以像其他成员一样直接访问。所以没有问题

 public void function() {
   // create an instance of B, normally have to create a 
   // instance of A to be bond to by b
   B b = new B();
 }

如果你想class B在 的范围之外创建实例class A,那么只需要 的实例就可以像这样class A创建 B 的实例class

A a = new A();
B b = a.new B();

假设您想在没有实例class B的范围之外创建实例,然后声明为静态,这意味着不在范围内class Aclass Aclass Bclass Bclass A

class A {
    static class B { 
    }

    public static void main(String[] args) {
        B b = new B();
    }
}
于 2013-04-12T06:06:37.050 回答
0

如果您的嵌套类不是静态的,那么答案是否定的。因为 :

Inner class treated as instance member of outer class.

因此,创建内部类实例的唯一方法是首先创建外部实例,然后才能在内部类上创建实例。如下:

Inner inner = new Outer().new Inner(); 

但是有一种方法可以在不创建外部类对象的情况下创建内部类对象,因为您的内部类应该是静态嵌套类。跟下面一样。

class Outer {
static class Inner {

然后您可以创建内部类的对象,如下所示:

Inner inner = Outer.new Inner();

因为:

Static nested class always treated as static member of outer class.
于 2013-04-12T06:14:34.487 回答