2017-01-14 16 views
0

なぜRationalはaddメソッドが返す型ですか?Addメソッドが返す型はなぜRationalですか? - Java

メソッドがvoid、int、Stringなどの型を返すときは分かりますが、なぜRationalが表示されないのか分かりません。

合理クラス:

public class Rational { 

    private int num; 
    private int den; 

    public Rational(int numerator, int denominator) { 

     this.num = numerator; 
     this.den = denominator; 

    } 

    public Rational add(Rational b) { 

     int numerator = (this.num * b.den) + (this.den * b.num); 
     int denominator = this.den * b.den; 

     return new Rational(numerator, denominator);   
    } 
} 

メインクラス:

public class Main { 

    public static void main(String[] args) { 

     // 1/2 + 1/3 = 5/6 
     Rational obj1 = new Rational(1, 2); 
     Rational obj2 = new Rational(1, 3); 
     Rational obj3 = obj1.add(obj2); 
    } 
} 
+5

2つの有理数を加算すると、結果は有理数になります。なぜあなたは別の結果を望んでいますか? –

+1

おそらくhttp://stackoverflow.com/questions/279507/what-is-meant-by-immutable – Tunaki

+0

あなたが求めていることはまったく明らかではありません。このような 'class'は' int'や 'String'のような型であることを理解していますか? –

答えて

0

なぜ合理的なタイプは、そのaddメソッドが返すのですか?私は メソッドがvoid、intまたはStringのような型を返すが、私は理解しません。 なぜRationalを参照してください。

voidintまたはStringはJDK事前定義されたタイプです。 メソッドでは、定義済みの型だけでなくカスタム型も、任意の型を返すことができます。

この例では、add(Rational b)メソッドには副作用のない実装があります。メソッドはパラメータを変更せず、newインスタンスを計算結果のRationalに返します。

メソッドにRationalオブジェクトを返さないと、どうやって取得しますか? intの配列を返すと、2つのintが含まれることは好ましくありません。情報を表現するための構造化された方法ではなく、関連するデータをカプセル化しないので不便です。

+0

@pvg add()メソッドの結果がRationalパラメータ(つまり、 'obj2'クライアント側)を変更して実行された場合、クライアント側の' obj2'では、メソッド呼び出しの前にあった値はもはやありません。 – davidxxx

+1

@pvg「あなたの例では、add(Rational b)メソッドはインプットパラメータに副作用のない実装を持っています」という文を忘れてしまいます。 "メソッドの命令は直接パラメータを変更できないため、"直接的な結果です。私はこのメソッドは副作用がないと述べているので、パラメータの状態を変更することはできません。これは論理的ですが、私はおそらくあまり明確ではありませんでした。 – davidxxx

+1

あなたの解釈は私のものと異なります。細かいことについて議論することは価値がありません。敬具。 – davidxxx

0

Rationalは、immutable objectとして実装されています。つまり、インスタンスの値を作成後に変更することはできません。

add()のような演算結果を得るには、現在のインスタンスの値を更新できないため、更新された値をコンストラクタに渡した新しいインスタンスを作成して返す必要があります。

編集:あなたのオブジェクトが不変な方法で使用されることを前提としている場合は、final修飾子をプライベートフィールドに追加して、コンストラクタ以外の場所に誤って割り当てられないようにする必要があります。

+1

Rationalは、示されているようにRationalの他のインスタンスには変更できません。 – pvg

+1

なぜですか?コンストラクタのどこにでも代入されるインスタンス変数はありません。 –

+0

あなたが話している方法で状態を変更することができます。追加は絶対にフィールドを更新することができます。 – pvg

関連する問題