繁体   English   中英

实例化类的内部类

[英]Instantiating inner class of class

基本上,我有一个带有通用T的Java类Foo和一个内部类Foo2,该类以某种方式使用了此通用T,例如以下示例:

public class Foo<T>
{
  public class Foo2
  {
    private T t;
    public void setObject(T t)
    {
       this.t = t;
    }
  }
}

在尝试并出错(直到编译器不会引发警告或错误)之后,如何创建此内部类Foo2的实例,我想到了以下内容:

Foo<String> foo = new Foo<String>();
Foo2 foo2 = foo.new Foo2();

第二行foo.new Foo2(); 对我来说是新事物,我不知道我在这里到底在做什么。 对于我来说,很明显,类Foo2的实例必须知道T是什么类,但是语法foo.new对我来说是新的。 我在这是要干嘛?

foo.new Foo2()语法与泛型无关。 这是通过提供封闭类的实例来实例化内部类的方法。

内部类是在另一个内部声明的类,不使用static关键字。 内部类的实例必须属于外部类的实例。 例如,内部类的一个很好的例子可能是

public class School {

    public class Pupil {

    }
}

每个Pupil都必须属于School因此如果没有School ,您将无法构建Pupil实例。 你可以做

School school = new School();
School.Pupil pupil = school.new Pupil();

第二行创建一个属于特定School的新Pupil

Pupil课堂上,通过School.this可以得到学生所属的学校。 您可以通过执行School.this.someField来使用School类的School.this.someField

如果您希望能够在没有Foo实例的情况下创建Foo2实例,则可以编写

public static class Foo2

代替。 在大多数情况下,您可能应该优先使用静态嵌套类而不是内部类。

内部类(与静态内部类相对)与外部类的特定实例相关联。

foo.new通过foo变量将内部类的新实例与外部类的foo.new关联。

这与泛型无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM