2011-10-27 16 views
3

私は、この2次元座標の多くで動作します私のコードでは、多くの操作を行います。のJava:メソッド呼び出しから2つのintを返す

int[] getSize() { 
    int[] res = {gridRows, gridColumns}; 
    return res; 
} 
私は小さなクラスを定義し、型の安全性を得ることができることを知っている

けど私は自分のコードに組み込まなければならない小さな自明な.javaファイルのような些細なクラスを持っているのを悩ますので、私は持っていません。

これは醜い、悪い、または悪いと思いますか?それともあなたもやっていますか?

答えて

0

残念ながら、Javaでこれは本当に複数の値を返すための最良の方法です。私は通常、配列またはリストのどちらかを使用します。私は必ずしもそれを「悪い形」と考えているわけではありませんが、それ自体のためのクラスを作成することは必須ではありません。

12

あなたのプロジェクトで、カプセル化したいコンセプトがある場合(たとえば、それらの2つのintの値が座標の場合)、クラスを持つことに間違いはありません。私の意見では、誰もが配列などを作成するように誰も強制しないでください。

たとえば、他の誰かが同じプロジェクトで開発していて、あなたのメソッドを呼び出していると思います。 2つの位置、またはCoordinatesと呼ばれるオブジェクト?

さらに、クラスを使用する場合は、正しいOO形式でカプセル化できる座標の比較などを実装することもできます。 (等号のようなものを定義し直した場合は、Object contractを尊重してください)。

2

あなたがセットに入れ、クラスは例えば(はるかが2Dでの操作を定義する1つのスポットに座標できるようになることを言及しないように、ネストされた静的クラスとして

それを定義することができます(「doesnの等しいです)

3

この場合、Pointを使用できます。

一般的に、美学はさておき、このようなものに関連した些細なヘルパーメソッドがあります。そのロジックをあちこちに散らすのではなく、それを保持するクラスを作るのが理にかなっています。場合によっては、デバッグやロギングのための良いtoString()だけでも十分な理由があります。

非常に高いパフォーマンスが懸念される場合は、トラフィックの多い簡単なヘルパーメソッドを最終的にインライン化できるようにします。

潜在的なメンバーが共通して持つ唯一の事柄は、それらが関数によって返されるということです。もっと共通点がある未来を見ることができれば、間違いなくクラスを作ってください。

場合によっては、voidを返し、メソッドが戻り値を設定できる種類の大きいスコープのコンテキストオブジェクトを渡すことを検討してください。これは非常に慎重に使用する必要があります - それは簡単に結合クリープを引き起こす可能性があります。

0

Javaがメソッドから複数の値を返すことができない場合、同じタイプの複数の値を返す唯一の選択肢です。。値が異なるタイプのものである場合は、戻り値をカプセル化するための小さなクラス(ソートの値オブジェクト)を記述する必要があります。

さらに厄介な選択肢として、配列をパラメータとして渡し、そこに戻り値を残すことです。これは、Javaでの参照渡しをシミュレートするためのハックです。非常に落胆した。

1

メソッドの戻り値を保持する内部クラスを作成できます。これは、新しい.javaファイルを必要としないという利点があります:

「静的」は、基本的に(あなたが Parent.Size代わりの Sizeを使用する必要が除いて)それだけで通常のクラスのように扱われることを意味としてのクラスを定義する
public class Parent{ 
    public Size getSize() { 
    return new Size(gridRows, gridColumns); 
    } 

    public static class Size{ 
    //... 
    } 
} 

Parent parent = new Parent(); 
Parent.Size size = parent.getSize(); 

。クラスが "静的"でない場合は、outterクラスのインスタンスを持たずに新しいクラスのインスタンスを作成することはできません。