2016-07-19 15 views
3

私は、複数の戻りオブジェクトを必要とする多くのメソッドを持つJavaでプロジェクトをやっています。このために、私は戻りオブジェクトをカプセル化するプライベートクラスを作成しなければなりません。オブジェクトは、コード内のFontResultがフォント名とフォントサイズを返しますが、必要な戻り値の型ごとに常に新しいオブジェクトを作成するので意味があります。どういうわけか、Javaの記述方法を迂回しようとしています。これは間違っているのですか? tell-dont-askのアプローチのほうで自分のコードを構造化するべきですか?次のように多くのプライベートクラスが悪いスタイルを作成していますか?

例は次のとおりです。

String test = "hello"; 
StringResult result = getInformation(test); 
int length = result.length; 

private StringResult getInformation(String test) { 
    int length = test.length(); 
    char firstChar = text.charAt(0); 
} 

private class StringResult { 
    int length; 
    char firstChar; 

    StringResult(int length, char firstChar) { 
    this.length = length; 
    this.firstChar = firstChar; 
    } 
} 
+0

定義しているプラ​​イベートクラスの数、またはインスタンス化されているクラスのインスタンス数について質問しますか? – searlea

+0

私はしばしば、特定のメソッドから戻るために一度だけインスタンス化するプライベートクラスを作成します。 – kabeersvohra

+1

これは非常に一般的な質問です。あなたは疑問に思っていることの具体的な例(コード)を教えてください。 – Ray

答えて

3

それは、「複数の戻りオブジェクト」のようなものを持つことが時折必要であるが、それは多くの場合、あなたの周りにあまりにも多くの情報を渡していることを示す兆候です。いくつかの可能な状況:オブジェクトは非常に緊密に結合されるように

  1. あなたが他の1つのオブジェクトから大量のデータを渡す - >あなたはおそらく1つのクラスを持っている必要があります。

  2. 誰も使用しない情報を渡しています - >消去してください。

  3. 本当にクラスのプライベートフィールドであるべきクラス内のメソッド間で情報を渡しています。

+0

#3に関しては、クラス内のグローバル変数を使用することをお勧めしますか?私は、渡される変数を持つよりも、より多くのデータを渡す方が良いと思いました。グローバル変数は、私のケースで渡されるデータの量を大幅に減らすでしょう。 – kabeersvohra

+0

オブジェクトに関する情報を保持するプライベートフィールドは問題ありません。それらが本当に必要な場合(しばしばそうでない場合にのみ)、パブリックゲッターまたはセッターを作成する必要があることに注意してください。さらに、(偶然に)変更されないように、コンストラクタでのみ設定されたすべてのフィールドを最終的にします。 –

+0

はい、それはクラス内にあります。クラス内の変数を使用すると、私の問題がどこにあるのかもしれないかを避けようとしていますか? – kabeersvohra

関連する問題