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