2017-02-03 4 views
1

文字列の意味を明確にする目的で、Stringの代わりにString Wrapperを使用することを提案しました。文字列ラッパーをより優れたデザインで使用していますか?

たとえば、次のような列挙型があります。

public enum Priority 
{ 
    PRIORITY_URGENT("urgent"), 
    PRIORITY_HIGH("high"), 
    PRIORITY_LOW("low"); 

    private String _piorityLevel; 
    private Priority(String level) 
    { 
    _priorityLevel = level; 
    } 

    public String getPriorityLevel() 
    { 
    return _priorityLevel; 
    } 
    .... 
} 

明確な文字列は以下のように優先度レベルを表していることを作るためにPriorityLevelのような新しいクラスとして優先順位の文字列をラップするためのより良いデザインですか?

public enum Priority 
{ 
    PRIORITY_URGENT(new PriorityLevel("urgent")), 
    PRIORITY_HIGH(new PriorityLevel("high")), 
    PRIORITY_LOW(new PriorityLevel("low")); 

    private PriorityLevel _piorityLevel; 
    private Priority(PriorityLevel level) 
    { 
    _priorityLevel = level; 
    } 

    public PriorityLevel getPriorityLevel() 
    { 
    return _priorityLevel; 
    } 
    .... 
} 
+4

のようなものですが、私はそれを読む方法は、 'Priority'列挙型は、すでに文字列ラッパーです、 'Priorのラッパーの第2レベルを追加するityLevel'は私には重複しているようです。 – Trejkaz

答えて

2

プログラマーが定義した暗黙の変換演算子がJavaで不足していると、文字列ラッパーを書くのがやや面倒になります。 toStringの規約が役立ちますが、多くの場合、変換は明示的に行われます。一般的なアクションの

と思いますが、あなたのAPIの利用者はPriorityLevelプロパティを取るために起こっている:どこでも、彼らは最後のtoString()通話が迷惑です

Priority priority = Priority.PRIORITY_URGENT; 
String level = priority.getPriorityLevel().toString(); 

を記述する必要がありますStringとしてそれを必要とします。このような状況では避けることはできますが、

System.out.println("This job has " + priority.getPriorityLevel() + "priority"); 

これはまったく考える必要はありません。結局のところenumはすでに文字列に適切なラッピングを提供しているので、2番目のレベルは不要です。

0

最初の列挙型で十分です。 2番目のラッパーは不要です。

それは、ちょうどこれをやってみてはどうですか?

public enum Priority { 
    URGENT, 
    HIGH, 
    LOW; 
} 

文字列表現が必要な場合は、toString()を使用してください。

for (Priority priority : Priority.values()) { 
    System.out.print(priority); 
} 

プリント:一般的に

URGENT

HIGH

LOW

1

、あまりにも深くprimitive obsessionに落ちないのは良いですが、あなたの一例として、 enumですが、すでに強いタイピングがあり、追加のレイヤーに文字列値をラップする明白な理由はありません。

Stringと他のプリミティブの過度の使用を避けたい理由は、コードをドメインの概念をより明示的に表現し、(コンパイル時に)間違った位置にパラメータを割り当てるなどの単純なプログラミングエラーを避けるためですメソッドのシグネチャは、私はこれが答えのために十分であるとは思わない

public String doSomething(String name, String id, String address) 

代わりの

public Result doSomething(Name name, Id id, Address address) 
関連する問題