2017-06-26 44 views
4

3.5更新至org.apache.commons:commons-lang3:3.6之后,我收到许多关于RandomStringUtils不推荐使用的警告。建议的替代方案是从commons-text开始的RandomStringGenerator。然而,如果你想要的仅仅是一个字符串(比如在单元测试中),那么这个类非常笨拙。比较:寻找RandomStringUtils的简洁替代方案

String name1 = RandomStringUtils.randomAlphabetic(FIRST_NAME_LENGTH); 
String name2 = new RandomStringGenerator.Builder().withinRange('a', 'z').build() 
     .generate(FIRST_NAME_LENGTH); 

(我知道这还没有相同的语义,但要保持短)

所以我在寻找一个短期和优雅的方式,理想的一个简易替换; Java 8,Spring,番石榴,甚至是纯测试库都是受欢迎的。

+1

如何只打造一个'RandomStringGenerator' –

+0

包装你正在寻找的所有功能呢? –

+0

@ redflar3:大多数情况下,我需要短字符串的数字或'常用'字母数字字符的短字符串。它们通常代表用户在表单中输入的值。 –

回答

3

我会考虑使用Facade pattern来包装RandomStringGenerator类的“笨拙”。

public class RandomStringUtilsFacade 
{ 
    public static String randomAlphabetic (final int firstNameLength) 
    { 
     return randomAlphabetic(firstNameLength, 'a', 'z'); 
    } 

    // If you want to use the range 
    public static String randomAlphabetic (final int firstNameLength, 
              final char low, final char high) 
    { 
     return new RandomStringGenerator.Builder().withinRange(low, high).build() 
     .generate(firstNameLength); 
    } 
} 
+1

这当然是一个简单(而且很好)的解决方案,但我真的更喜欢单线程。我不太明白为什么它首先被弃用。 –

+0

@MichaelPiefel除非我误解了你的评论,否则它是一行代码:'String name1 = RandomStringUtilsFacade.randomAlphabetic(FIRST_NAME_LENGTH);' –

+2

当然这是添加15行外观后的一行代码。 :-) 我想我最终会按照这些方法做很多事情。给我有机会添加专业的名字生成器。 –