2017-06-26 77 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行外觀後的一行代碼。 :-) 我想我最終會按照這些方法做很多事情。給我有機會添加專業的名字生成器。 –