2011-01-26 13 views
2

フォールを改善する方法はありますか。コードブロック:フォールを改善する方法Javaコード

public class MyUnits { 
    public static String MILLSECONDS = "milliseconds"; 
    public static String SECONDS = "seconds"; 
    public static String MINUTES = "minutes"; 
    public static String HOURS = "hours"; 

    public int quantity; 
    public String units; 

    public MyUnits(int quantity, String units) { 
     this.quantity = quantity; 
     this.units = units; 
    } 

    public String toString() { 
     return (quantity + " " + units); 
    } 

    // Test code 
    public static void main(String[] args) { 
     System.out.println(new MyUnits(1, MyUnits.MILLSECONDS)); 
     System.out.println(new MyUnits(2, MyUnits.SECONDS)); 
     System.out.println(new MyUnits(3, MyUnits.MINUTES)); 
     System.out.println(new MyUnits(4, MyUnits.HOURS)); 
    } 
} 

助けてください。

+1

どのようにですか?あなたの目標は何ですか?パフォーマンス?読みやすさ?難読化? – Daniel

+0

Javaはすでにjava.util.concurrentに独自のTimeUnitクラスを持っています。 – Daniel

+0

@ダニエル:特にそうではありません。一般的に、コードを改善する方法。 – Pritish

答えて

0

enumをクラス内のユニットに使用します。

public enum MyUnit { 
MILLSECONDS(1, "milliseconds"), SECOND(2, "seconds"), 
MINUTES(3,"minutes"), HOURS(4, "hours"); 



private MyUnit(int quantity, String units) { 
    this.quantity = quantity; 
    this.units = units; 
} 

private int quantity; 
private String units; 

public String toString() { 
    return (quantity + " " + units); 
} 
    /*getters setters*/ 
} 

と、ちょうどその

MyUnit.HOURS.getUnits(); 
MyUnit.HOURS.getCuantity(); 
+0

+1を削除しました。enumが何であるか分からず、数量が彼の実装では恣意的であるように思われるからです。 – Daniel

+0

@ダニエル何が間違っていますか? –

+0

@ダニエル - ヒラリーはenumsの使い方をよく知っています。 OPの概念「MyUnit」が異なるため、「4ミリ秒」や「25ミリ秒」などの「何かの量」を記述するオブジェクトを作成したいと考えました。 –

0

追加クローン()、hashCode()およびequals()のように呼び出して、匹敵する、直列化およびCloneableを実装。

テストコードを削除し、テストクラスに移動します。テストにはJUnitを使用します。

public Date addToDate(Date date)を書きます。

+0

SerializableとCloneableを取り出した場合、私はアップヴォートします。間違いなくCloneableを取り出してください! –

+0

教えてください、なぜですか? – Daniel

+0

これを読んでください... http://www.xenoveritas.org/blog/xeno/java_copy_constructors_and_clone ...などです。 –

3

static intはfinalである必要があります。列挙型で、静的なint型を交換:

public enum Unit {MILLISECOND, SECOND, MINUTE, HOUR} 

新しいコンストラクタのシグネチャは次のようになります。

public MyUnits(int quantity, Unit unit) { ... } 

Javaで "定数" のための通常の修飾子は

public static final <Type> <name> = <value>; 

大きな機能強化ですMyUnitの非静的フィールドはプライベートにする必要があります。アクセスのためのgetter/setterメソッドを追加してください。

最後に(深刻なコードの場合のみ)、テストコードをクラスから分離します。 junitのようなテストフレームワークを見て、別々のテストクラスを実装してください。

1
  1. マークfinalとしてごpublic static変数 。より良いですが、enumを使用します。

  2. インスタンス変数(quantity,units)をpublicにしないでください。その値を読み取るための「ゲッター」メソッドを提供します。 は、値を変更するための "setter"メソッドを提供するではありません。これは、簡単に使用することができます不変クラス、(不変オブジェクトの状態がはるかに予測可能な可変オブジェクトのそれよりもです!)になり

  3. コード が何を意図しているかについて具体的に。それを としてください。 (これはまた あなたのより良い答えを得るでしょう 、より具体的な質問を、お願いすることができます。)

  4. 、特にjavadoc commentsをコメントを追加します。

関連する問題