哪种方法更好?静态方法中的 ArrayList 很混乱

Which approach is better? ArrayList inside static method is confused

我主要关心的是实现以下场景的线程安全性,我想看看使用静态方法是否比普通对象实例更好,反之亦然。 我读了一些文章,但我更困惑了。

  1. Web 应用程序将从每个 http 表单提交中接收字符串文本。每个表单提交都是包含项目 ID 的文本以及用户创建的自由文本。
  2. 字符串文本将被解析。解析时,将创建本地 ArrayList 并将此本地 ArrayList 用作项目的临时占位符。 因为这个ArrayList,我不确定静态方法是否合适。
  3. 使用此 ArrayList,将重新格式化文本。 ArrayList 将循环遍历并使用一些文本进行格式化。

通常我会创建简单的静态方法,将字符串作为输入和 return 格式化文本。但是由于 ArrayList 被用作局部变量,我不确定静态方法是否是正确的选择,或者我是否应该为它创建普通的对象实例。由于 ArrayList 是局部变量,但是将其设计为成员变量并将 class 实例化为以输入文本作为成员变量的对象比静态方法更好吗?

下面class是我做的,但不确定我是否应该重写为非静态。

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")

记住:static可以看作是异常好的OO。

使用static意味着在您的类之间引入耦合;更糟糕的是:你 "kill" 多态性;这是 OO 的基石之一。

从这个意义上说:默认是不使事情静态化。例外可能是具有 非常 defined/clear 范围的助手/实用程序 类。所以从那个角度来说你还可以。

除此之外:不用担心。当您拥有多个线程操作的 shared 数据时,代码对线程变得敏感。在你的例子中 - 你没有那个:调用你的方法的每个线程......将创建它的 own 列表实例!

含义:如果您的代码如下所示:

public class A {
  private List<String> itemList;

然后您的不同方法将使用该静态字段;那么你将面临多线程问题。但是您显示的代码不依赖于 shared 数据 - 因为它 not 使用任何静态字段。