2013-06-17 4 views
7

Javaの書式文字列の構文が複雑に得ることができ、例えば:Java形式の文字列をうまく作成するライブラリがありますか?

"|%1$-10s|%2$-10s|%3$-20s|\n" 

これらの書式指定文字列の建設を支援するために流暢なDSLを作成するために誰かのために熟したように思われる(Jooqが何に似てSQLの場合)。

このようなことはありますか?

+1

良い点:-)実装を記述する必要があります。私はそのような図書館を何度も考えました。あなたはおそらくそれを実装したいですか?私はそのようなライブラリを使用することをうれしく思います。 – AlexR

+0

フルフルは早い段階で特別なメリットがあります。使用方法はとても歓迎され、ユーザーのニーズに積極的に耳を傾けています。一部の機能が欠落しているか、または実際には便利でないことが分かった場合は、私は、新機能を扱うflufluの新しいバージョンについて議論し、リリースするために開いています。 –

答えて

5

jOOQ's APIおよびjOOQ's underlying API design techniquesに触発された流暢なAPIジェネレータflufluを使用して、このようなAPIを作成できます。

Flufluは、APTツールを使用して処理された注釈を提供し、API実装から流暢なAPIを生成します。アノテーションは、有限状態機械をモデル化する。ここではそのウィキからの例です:

@Fluentize(className = "CoreClass", startState = "State0", startMethod = "start") 
public abstract class ToBeFluentized implements Cloneable { 

    @Transitions({ 
     @Transition(from = "State0", end = true), 
     @Transition(from = "State1", end = true) 
    }) 
    public void end() { 
    } 

    protected String with = null; 
    protected List<byte[]> b = new LinkedList<>(); 

    @Transition(from = { "State0", "State1" }, to = "State0") 
    public abstract ToBeFluentized with(
     @AssignTo("with") String a, @AddTo("b") byte[] b 
    ); 

    @Transition(from = "State1", to = "State0") 
    public ToBeFluentized z() { 
     return this; 
    } 

    Set<Integer> j = new HashSet<>(); 
    @Transition(from = "State1", to = "State1", name="a") 
    public abstract ToBeFluentized z(@AddTo("j") int j); 

    @Transition(from = "State0", to = "State1") 
    public ToBeFluentized a() { 
     return this; 
    } 

    @Transition(from = "State0", to = "State1") 
    public ToBeFluentized b() { 
     return this; 
    } 

    @Transition(from = "State0", to = "State1") 
    public ToBeFluentized vari(String... strings) { 
     return this; 
    } 
} 

これは、その後、そのまま使用することができます。もちろん

State0 c = CoreClass.start().a().z(); 
State0 d = c.b().with("z", "z".getBytes()); 
State0 e = c.b().with("q", new byte[]{0,0,1}); 
d.end(); 
e.end(); 

、あなたはまだ

+0

うわー!ありがとう。とても興味深い! – AlexR

+0

@AlexR:それはまだ初期の状態ですが、非常に有望です。優れた流暢なAPIを書くことは非常に面倒です。このツールは確かに役立つかもしれません –

関連する問題