基本上我有一个带有泛型T的java类Foo和一个使用这个泛型T的内部类Foo2,就像下面的例子一样:
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
对我来说是新的。我在这做什么?
答案 0 :(得分:2)
foo.new Foo2()
语法与泛型无关。它是一种通过提供封闭类的实例来实例化内部类的方法。
答案 1 :(得分:2)
内部类是在不使用static
关键字的情况下在另一个内部声明的类。内部类的实例必须属于外部类的实例。例如,内部类的一个很好的例子可能是
public class School {
public class Pupil {
}
}
每个Pupil
都必须属于School
,因此您无法在没有学校的情况下构建Pupil
个实例。你可以做到
School school = new School();
School.Pupil pupil = school.new Pupil();
第二行创建属于特定Pupil
的新School
。
在Pupil
课程内,您可以通过School.this
获得学生所属的学校。您可以通过执行School
来使用School.this.someField
类的字段。
如果您希望能够在没有Foo2
实例的情况下创建Foo
个实例,则可以编写
public static class Foo2
代替。在大多数情况下,您可能应该使用静态嵌套类而不是内部类。
答案 2 :(得分:1)
内部类(与静态内部类相对)与外部类的特定实例相关联。
foo.new
将内部类的新实例与foo
变量中的外部类的instacne相关联。
这与泛型无关。