2016-06-14 15 views
3

私は問題があります。Java:メソッド引数を変更する最も効率的な方法

class HundredMethods { 

    public void method1(int) { 
    } 

    public void method2(int) { 
    } 

    ... (98 more methods) 

} 

と私はこれらのメソッドの5の引数を変更したい:だから、そこにこのクラスは100の+メソッドとJREへのネイティブであると仮定します。 具体的には、整数をdoubleにします。余分なdouble引数を追加するには
私の現在のソリューションは、ラッパークラスが含まれている:
-A:提供元のクラスに直接アクセス
-B:(いくつかの余分な入力で)二重の引数を「翻訳」という5つの方法を持っています元の整数引数に変換します。だから、:

class WrapperMethods{ 
    public HundredMethods original = (assigned at constructor) 

    public void method1(double,double(extra)) { 
    int i = (assigned a value in "code" below) 
    this.original.method1(i); 
    } 
} 

の両方が変化すると、上記1以外にも「重い」クラスにいくつかのメソッドに引数を追加する別の軽量なソリューションがありますか?私のコードでこのソリューションを実際に実装する面では、ラッパークラスがどのようなメソッドを変更するのかユーザーがわからないときに乱雑になることがあります。実際には、私は約250 +メソッドのクラスが25のメソッドを変更しているので、クラスが大きければ、私のコードが厄介になります。コードをパブリックとして公開したいと考えると、ラッパーを使用するたびに、ラッパーがどのメソッドを変更するか調べなければなりません。

ありがとうございます!

+3

ラップするクラス、変更したいメソッド、変更する必要がある理由を教えてください。それが公共のJREクラスで、あなたのwrkを公にしたいのであれば、今すぐ始めましょう。 –

+0

@JBNizet java.awt.Componentクラスを変更し、サイズや位置を扱うメソッドを変更しています。私が質問をジェネリックにしたのは、自分のプロジェクトのバージョン0.1を公開しただけなので、[ScaleUtils](https://github.com/19mkarpawich/ScaleUtils)です。これは、他のいくつかのUIクラス私は方法を変える。 –

+0

メソッドシグネチャを 'int'から' double'に変更できないのはなぜですか? 'int'が' double'に自動的に拡大されるので、現在の呼び出しサイトはすべて動作します。 –

答えて

1

変更する5つのメソッドのそれぞれに対して2つのメソッドを追加してサブクラスを作成することができます。 1つはdouble、それはあなたのロジックを行い、元のメソッドへのsuper.呼び出し、そしてintを受け取り、doubleを渡すときと同じことをするものです。

その他の95個のメソッドは、引き続き通常の方法でサブクラスからアクセスできます。

class WrapperMethods extends HundredMethods { 
    public void method1(double d) { 
     int i = (assigned a value in "code" below) 
     super.method1(i); 
    } 

    public void method1(int i) { 
     // Make sure that any calls that happen to pass in an integer, 
     // also go by your logic. 
     this.method1((double)i); 
    } 
} 
+0

まず、お返事いただきありがとうございます。私はあなたのアプローチをとることを考えましたが、混乱(およびその混乱の結果生じる余分な開発時間)の観点から、ユーザが誤って元のメソッドを整数で代わりに使用することを妨げているのは何ですか?私のラッパーソリューションは、元のメソッドにアクセスする前に元のクラスにアクセスする必要があるため、元のメソッドを使用しないようにします。また、引数として倍精度があるので、ユーザーは小数点を入力できるので、残念ながら整数を倍精度にキャストできません。 –

+0

@MaxK「元のメソッドを誤って整数で使用することをユーザーが妨げているのは何ですか?」それは具体的に私のコードが扱うものです。 'int'引数でメソッドを実装することで、元のメソッドの偶発的な使用を捕らえて、それを' double'実装に向けることができます。 –

+0

あなたのコードが完璧な意味を持つようになりました。しかし、上記のJBNizetのコメントへの私の返信を読んだ場合、私のプロジェクトはバージョン0.1であり、0.2では新しいメソッドごとに余分なdouble引数を追加しています。あなたはそれをどうやって実行しますか? –

関連する問題