![](/img/trans.png)
[英]Which approach is better for finding the frequency of element in an arraylist?
[英]Which approach is better? ArrayList inside static method is confused
我主要担心的是线程安全,以实现以下场景,我试图看看是否使用静态方法比普通对象实例更好,反之亦然。 我读了一些文章,但我更加困惑。
通常我会创建简单的静态方法,将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.