簡體   English   中英

無法理解java中的新關鍵字

[英]unable to understand new keyword in java

可能是一個非常noob的問題

我是java新手,正在閱讀用java編寫的第三方api ...

我發現了這個宣言

Foo foo = new FooBar().new Foo();

我無法理解

 FooBar().new

這個宣言為什么會這樣?

在聲明上述內容以及此類聲明的替代方案時,可以獲得哪些優勢。

任何建議/參考將不勝感激。

謝謝

FooBar包含這樣的內部類

class FooBar {

    class Foo {
      ...
    }
}

需要一個新的外部類實例來實例化內部類。 有些類本身沒有意義,因此實現為嵌套類。 在這里FooFooBar有關系,並且還有權訪問所有后者的成員變量。

請參閱@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM