[英]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.