簡體   English   中英

Java 靜態實例 VS 獲取方法

[英]Java static instance VS get-method

我一直在思考這些代碼片段之間的區別。 我知道如果您使用 getInstance(下面的第二個選項),則無法設置實例字段,但是還有其他區別嗎?

public class MainClass {
    public static MainClass instance;

    public static void main(String[] args) {
        instance = new MainClass();
    }

    public void HelloWorld() {
        System.out.println("This is a test!");
    }
}

VS

public class MainClass {
    private static MainClass instance;

    public static void main(String[] args) {
        instance = new MainClass();
    }

    public MainClass getInstance() {
        return instance;
    }

    public void HelloWorld() {
        System.out.println("This is a test!");
    }
}

使用“MainClass.instance.HelloWorld();”有什么區別 (第一)或“MainClass.getInstance().HelloWorld();” (第二)

TLDR:哪個,為什么? 有什么不同?

謝謝! :)

在第一個示例中,您已將instance聲明為public使其容易受到意外更改的影響,因此不建議這樣做。

在第二個示例中,您已將instance聲明為private使其在類之外不可見,從而確保如果需要,只能通過public mutator/setter 更改它,您可以在其中放置所需的邏輯如何更改。

可擴展性

如果您的程序對實例進行了多次調用,並且您想更改實例的來源或在檢索實例時執行其他操作,那么區別就在某處,您可以修改getInstance()方法,而不是添加代碼在您使用instance每個位置。

民眾

當前代碼容易受到外部人員的攻擊,他們可以通過子類化來使用新的實例甚至他們自己的實例來更改您的實例。 如果您在第一次 init 之后不需要更改實例,那么將其設為 final 然后 public 是好的。

私人的

使您免於上述問題。 如果需要,您可以更好地控制更改實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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