2017-06-26 28 views
4

org.apache.commons:commons-lang3:3.6から3.5に更新した後、RandomStringUtilsについては多くの警告が出ます。推奨される代替案はRandomStringGeneratorからcommons-textまでです。しかし、あなたが望むものが単なる文字列(例えば単体テストで)であれば、そのクラスは使用するのが非常に面倒です。比較:RandomStringUtilsの簡潔な代替を探しています

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

(私はしても同じセマンティクスではないことを知っているが、短いそれを維持したい。)

だから私はドロップイン交換理想的には、短いとエレガントな方法を探しています; Java 8、Spring、Guava、そしてテスト専用のライブラリまで、大歓迎です。

+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

それはもちろん、簡単な(そして良い)解決策ですが、私は本当に1ライナーを好んでいました。なぜ私はそれが最初に廃止されてしまったのか分かりません。 –

+0

@MichaelPiefel私はあなたのコメントを誤解していない限り、それはワンライナーです: 'String name1 = RandomStringUtilsFacade.randomAlphabetic(FIRST_NAME_LENGTH);' –

+2

もちろん、15行のファサードを追加した後は1ライナーです。 :-) 私はこれらの行に沿って非常に何かをやって終わると思う。特殊なforenameジェネレータを追加する機会を私に与えます。 –

関連する問題