[英]unable to understand new keyword in java
可能是一個非常noob的問題
我是java新手,正在閱讀用java編寫的第三方api ...
我發現了這個宣言
Foo foo = new FooBar().new Foo();
我無法理解
FooBar().new
這個宣言為什么會這樣?
在聲明上述內容以及此類聲明的替代方案時,可以獲得哪些優勢。
任何建議/參考將不勝感激。
謝謝
FooBar
包含這樣的內部類
class FooBar {
class Foo {
...
}
}
需要一個新的外部類實例來實例化內部類。 有些類本身沒有意義,因此實現為嵌套類。 在這里Foo
與FooBar
有關系,並且還有權訪問所有后者的成員變量。
請參閱@Reimeus關於第一個問題的答案。
至於你的第二個問題:
這種宣言有哪些替代方案
如果內部類可以獨立於外部類創建,則可以使內部類靜態,如:
public class FooBar
{
// ...
public static class Foo
{
// ...
}
}
然后你將實例化:
new Foobar.Foo()
這種靜態內部類的經典用法是您的類的構建器類(從Effective Java中提取的配方 - 購買本書)。 這是創建不可變實例的好方法,也是“流暢接口”的一個很好的例子,因為通常所有構建器方法都返回構建器實例本身:
public class MyClass
{
public static Builder newBuilder()
{
return new Builder();
}
private MyClass(final Builder builder)
{
// build according to data in builder
}
public static class Builder
{
private Builder()
{
}
// methods to add data to builder, then:
public MyClass build()
{
return new MyClass(this);
}
}
}
你會注意到靜態工廠方法newBuilder()
; 這允許你寫:
MyClass.newBuilder()
代替
new MyClass.Builder()
創建一個構建器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.