实例化类

时间:2015-11-15 15:58:57

标签: java

基本上我有一个带有泛型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对我来说是新的。我在这做什么?

3 个答案:

答案 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相关联。

这与泛型无关。