Java:メソッド呼び出しから2つのintを返す

私は多くの2次元座標で動作する私のコードでこれを多く行います:

int[] getSize() {
    int[] res = {gridRows, gridColumns};
    return res;
}

私は小さなクラスを定義して型の安全を得ることができることを知っていますが、私は自分のコードに取り入れる必要がある小さな自明な.javaファイルのような些細なクラスを持つことを悩ますので、

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

3
追加された
ビュー: 6

6 答え

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

たとえば、他の誰かが同じプロジェクトで開発していて、あなたのメソッドを呼び出していますか?2つの位置を持つint配列、またはCoordinatesというオブジェクトを取得するのがより明確だと思いますか?

さらに、クラスを使用する場合、正しいOO方法でカプセル化できる座標の比較などを実装することもできます。 (オブジェクト契約を尊重することを忘れないでください。あなたがequalsのようなものを再定義した場合)。

12
追加された

この場合、ポイントを使用することができます。

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

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

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

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

3
追加された

ネストした静的クラスとして定義することができます

クラスがもっと多くのことを許すことは言うまでもありません(例えば、1つのスポットで2D座標の操作を定義し、それらをセットに入れます(配列は配列のように機能しません))

2
追加された

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

public class Parent{
  public Size getSize() {
    return new Size(gridRows, gridColumns);
  }

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

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

クラスを「静的」として定義すると、基本クラスと同じように扱うことができます(ただし、 Size ではなく Parent.Size を使用する必要があります)。クラスが "静的"でない場合は、outterクラスのインスタンスを持たずに新しいクラスのインスタンスを作成することはできません。

1
追加された

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

0
追加された

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

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

0
追加された