簡體   English   中英

哪種方法更好? 靜態方法里面的ArrayList很混亂

[英]Which approach is better? ArrayList inside static method is confused

我主要擔心的是線程安全,以實現以下場景,我試圖看看是否使用靜態方法比普通對象實例更好,反之亦然。 我讀了一些文章,但我更加困惑。

  1. Web應用程序將從每個http表單提交中接收String文本。 每個表單提交都是包含項目ID的文本,其中包含用戶創建的自由文本
  2. 將解析字符串文本。 在解析時,將創建本地ArrayList,並將此本地ArrayList用作項目的臨時占位符。 由於這個ArrayList,我不確定靜態方法是否合適。
  3. 使用此ArrayList,將重新格式化文本。 ArrayList將循環並使用一些文本格式化。

通常我會創建簡單的靜態方法,將String作為輸入並返回格式化文本。 但由於ArrayList被用作局部變量,我不確定靜態方法是否是正確的選擇,還是應該為它創建普通的對象實例。 由於ArrayList是局部變量,但最好將其設計為成員變量並將類實例化為對象,輸入文本作為成員變量而不是靜態方法?

下面的課是我做的,但不確定我是否應該重寫為非靜態。

public class A {

 private static List<Item> parseFreeText(String message){

       List<Item> itemList = new ArrayList<Item>();
       /*
       read message line by line and parse it and build ArrayList and return

       itemList.add(item);
       */

       return itemList;
 }     

 public static String formattedTextOfItems(String message){

    List<Item> itemList = parseFreeText(message);       
    StringBuilder sb = new StringBuilder();
    for(Item item: itemList){
       /* format string with item information */
       sb.append("ITEM ID: " + item.getId());
    }
    return sb.toString();
 }

在servlet層,它將用作以下內容

 String order = A.formattedTextOfItems(req.getParameter("orderText")

請記住: 靜態可被視為良好OO的異常

使用靜態方法在類之間引入緊密耦合; 更糟糕的是:你“殺死”多態性; 這是OO的基石之一。

從這個意義上說:默認不是讓事情變得靜止。 例外可以是具有非常明確/明確范圍的輔助/實用程序類。 從這個角度來看你就可以了。

除此之外:不用擔心。 當您擁有多個線程操作的共享數據時,代碼會對線程敏感。 在你的例子中 - 你沒有:調用你的方法的每個線程......將創建自己的列表實例!

含義:如果您的代碼看起來像:

public class A {
  private List<String> itemList;

然后,您的不同方法將使用靜態字段; 那么你將面臨多線程問題。 但是您顯示的代碼並不依賴於共享數據 - 因為它沒有使用任何靜態字段。

暫無
暫無

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

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