基本上我有一个带有泛型 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
对我来说是新的。我在这里做什么?
最佳答案
内部类是在不使用 static
关键字的情况下在另一个类中声明的类。内部类的实例必须属于外部类的实例。例如,内部类的一个很好的例子可能是
public class School {
public class Pupil {
}
}
每个 Pupil
都必须属于一个 School
,因此您不能在没有学校的情况下构造一个 Pupil
实例。你可以做
School school = new School();
School.Pupil pupil = school.new Pupil();
第二行创建一个属于特定学校
的新Pupil
。
在 Pupil
类中,您可以通过执行 School.this
获取学生所属的学校。您可以通过执行 School.this.someField
使用 School
类的字段。
如果你想在没有 Foo
实例的情况下创建 Foo2
实例,你可以这样写
public static class Foo2
相反。在大多数情况下,您可能应该优先使用静态嵌套类而不是内部类。
关于java - 实例化类的内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33721690/