繁体   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