簡體   English   中英

我可以制作一個實用方法 static 嗎?

[英]Can I make a utility method static?

我有一些功能,例如:

  1. 一種接受字符串輸入並修改並返回字符串的方法

  2. Function 將字符串(保存 XML)作為輸入並對其進行解析並返回 object。

例如:

public class MyUtils{

    public static modifyString(String str){
        return someString;
    }

    public MyObject parseString(String xml){
        //Parse XML
        return obj;
    }
}
  1. 我可以制作這樣的功能 static,以便任何人都可以在不創建我的 class 實例的情況下使用這些功能嗎?
  2. 如果兩個線程同時調用 function 怎么辦? 代碼是線程安全的嗎? 如果是/否,如何?
  3. 我什么時候應該使用 singleton object 什么時候應該使用 static 方法?
  1. 是的,只需添加static關鍵字。 使用您給出的示例,您可以像這樣調用modifyString

    MyUtils.modifyString("一些字符串數據");

  2. 在您的示例中,由於您沒有修改存儲在 class 上的任何內容,因此這將取決於多個事物是否正在訪問傳入的內容。 class 本身應該是線程安全的。

  3. 它們是不同的東西,當您需要使用實例數據時,即當您需要 class 具有屬性時,您應該使用 singleton 或 state。 對於實用程序函數,更好的選擇通常是使用 static 方法,因為您不太可能將 state 與實用程序 function 關聯。

  1. 是的你應該。

  2. static 方法沒有問題; 但是,如果您的方法引用了 static 字段或可變參數,則可能與其他線程發生沖突。 如果它引用 static 字段,請考慮改用 singleton 模式。

  3. 當 class 有自己的 state 進行管理時,使用 singleton 模式來管理,尤其是對客戶隱藏此類 Z9ED39E2EA9312EF573E4。 如果 class 僅包含無狀態實用程序函數,則可以使用 static 方法,而無需使用 singleton 模式。

  1. 是的,您可以制作這些方法 static。 事實上,這些“實用程序類”通常是使用 static 方法創建的。

  2. 不,這些方法不是線程安全的,線程可能會中斷方法執行並更改當前正在處理的值。

  3. 當您只需要 class 的一個實例時,您應該使用 singleton。 一個很好的例子是記錄有關程序執行信息的 class。 在這種情況下,使用 singleton 是沒有意義的,因為您將使用 static 方法。

暫無
暫無

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

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