字符串Utils-Java

字符串Utils-Java,java,string,Java,String,我创建了一个StringUtil类,用于整个应用程序的字符串验证。StringUtil的代码如下所示 public class StringUtil { public static synchronized boolean isValidString(String string) { return string!= null && string.trim().length() > 0; } } 在这个类中,该方法检查字符串是否为有效字符串

我创建了一个StringUtil类,用于整个应用程序的字符串验证。StringUtil的代码如下所示

public class StringUtil {
    public static synchronized boolean isValidString(String string) {
        return string!= null && string.trim().length() > 0;
    }

}
在这个类中,该方法检查字符串是否为有效字符串。此方法是线程安全的。在企业应用程序中,可能有多个线程访问此方法。如果一个线程正在访问此方法,那么所有其他线程都必须等待轮到它。此方法反过来将非常频繁地用于检查字符串的空值。那么,哪一个是最好的选择

  • 使其成为单例和线程安全
  • 将此作为实例方法
  • 有没有其他方法可以用这种类型的对象组织一个池,每个线程都会选择一个并在完成后将对象释放到池中。因此线程安全不是一个问题,对象创建也没有完成
  • 是否有相同的开源库

  • 由于这里没有任何状态(只使用方法参数
    string
    ),因此该方法本质上是线程安全的。因此,不需要使用
    synchronized
    关键字


    如果该方法在整个项目中都使用,那么最好的选择就是像您已经做的那样声明它为静态。

    因为您在这里没有任何状态(您只使用方法参数
    字符串
    ),所以该方法本质上是线程安全的。因此,不需要使用
    synchronized
    关键字


    如果该方法在整个项目中都使用,那么最好的选择就是像您已经做的那样声明它
    static

    您可以尝试Apache Commons中的util类


    但无论如何,这里都有线程安全性,因为您没有处理其他调用可能读取的类中的任何内容(即,您没有状态)。

    您可以尝试Apache Commons中的util类


    但无论如何,这里都有线程安全,因为您没有操作类中其他调用可能读取的任何内容(即,您没有状态)。

    像这样的帮助器方法通常是
    公共静态方法,而不是
    同步方法,因为类不保持状态。因为它也不保持状态,所以不需要池

    我认为apache commons类就是一个很好的例子


    我有一种感觉,你试图用一个中子炮来打开一个核桃,简单就是王道:)

    通常像这样的助手方法是
    公共静态的
    ,而不是
    同步的
    ,因为类不保持状态。因为它也不保持状态,所以不需要池

    我认为apache commons类就是一个很好的例子


    我有种感觉,你试图用中子炮来打开核桃,简单就是王道:)

    这个方法不应该同步,因为它不使用任何类级变量。因此,多个线程可以同时访问它,而不会出现任何问题


    此外,在为运行到容器中的企业应用程序编写代码时,请忘记同步。注意线程安全是容器的责任<代码>已同步
    块只会干扰容器完成其工作。如果您需要在企业应用程序中进行同步,请重新考虑您的设计和/或找到其他模式(有很多)来解决您的问题。

    此方法不应同步,因为它不使用任何类级变量。因此,多个线程可以同时访问它,而不会出现任何问题


    此外,在为运行到容器中的企业应用程序编写代码时,请忘记同步。注意线程安全是容器的责任<代码>已同步
    块只会干扰容器完成其工作。如果您需要在企业应用程序中进行同步,请重新考虑您的设计和/或找到其他模式(有很多)来解决您的问题。

    您可能应该在Apache Commons中使用该类

    您可能应该在Apache Commons中使用该类

    不需要
    synchronized
    关键字,因为字符串是

    不可变对象通常很有用,因为它们本质上是线程安全的

    public static boolean isValidString(String string) {
        return !(string== null || string.isEmpty()); //Since 1.6
    }
    

    因为字符串是空的,所以不需要
    synchronized
    关键字

    不可变对象通常很有用,因为它们本质上是线程安全的

    public static boolean isValidString(String string) {
        return !(string== null || string.isEmpty()); //Since 1.6
    }
    

    实用程序类通常只包含静态方法,因此最好明确说明这些类不是为实例化而设计的。因此,将其构造函数设置为私有:

    public class StringUtils {
    
      private StringUtils() {
        throw new AssertionError("shouldn't be instantiated");
      }
    
    }
    

    (请参见Joshua Bloch的:第4项:使用私有构造函数强制不可实例化)

    实用程序类通常只包含静态方法,因此最好明确声明这些类不是为实例化而设计的。因此,将其构造函数设置为私有:

    public class StringUtils {
    
      private StringUtils() {
        throw new AssertionError("shouldn't be instantiated");
      }
    
    }
    

    (请参见Joshua Bloch的:第4项:使用私有构造函数强制不可实例化)

    那么“”在应用程序中不是有效字符串吗?我会选择isEmpty/NoteEmpty方法,谁知道“”什么时候会成为有效字符串呢……我同意字符串是不可变的。如果两个线程同时调用这些函数,而另一个线程调用一个null和一个有效字符串,那么线程安全问题将如何解决?…该方法可能也应该重命名<代码>“
    实际上是一个有效字符串(在您的用例上下文中可能不是)。
    isPresent
    isNotEmpty
    怎么样?因为这是类方法,所以多个线程只会这样调用(我假设)StringUtil.isValidString(null)(Thread1)StringUtil.isValidString(“SampleString”)(Thread2)这里的状态不是共享的,方法是共享的。那么我们将如何解决线程安全问题。实际上,它不仅仅是一个类方法,它是一个静态类方法。它计划在不分配新对象的情况下使用