2011-12-21 4 views
2

私は次の問題に取り組んでいます。私はライブラリを使用しており、私のニーズに合わせてそのライブラリのクラスのコンストラクタをオーバーロードしたいと考えています。ライブラリのクラスは次のようにコンストラクタを提供します。ライブラリクラスコンストラクタのオーバーロード

public SomeName(int variable) {...} 

と私はそのためのファクトリーを作成

public SomeName(int variable, float myVariable) {...} 

を呼び出すことができるようにしたいと思いやりすぎのようです、行う簡単な方法がありますこの?

+0

あなたはできていますこのライブラリクラスを拡張するには? 、またはそれは最終クラスですか? – rineez

+0

私はそれを行うことができます、私は私の入札を行うためにJavaを乱用することができるだけ期待していた。 – JohnEye

答えて

3

Java言語では、クラスコード自体を変更せずにスーパークラスのコンストラクタを変更できるようにするための高レベルの構造は提供されていません。

しかし、代替案があります。主に、cglibを使用して、ライブラリにバイトコードを「注入」し、独自のコンストラクタを作成することができます(いくつかの高度な手法を使用して)。絶対に最もコーディング作業とあなたの問題を解決する最善のために推奨さ(あなたは非自明な何かをやっていないと仮定した場合)されていない

は、ちょうどそのクラスをサブクラス化されています

class SomeName { 
    public SomeName(int variable) { 
     ... 
    } 
} 

class OtherName extends SomeName { 
    public OtherName(float otherVariable) { 
     this(*DEFAULT*, otherVariable); 
    } 

    public OtherName(int variable, float otherVariable) { 
     super(variable); 
     ... 
    } 
} 
+0

ありがとう、それは私が知りたかったものです。 – JohnEye

+0

@JohnEye - ようこそ。 – lsoliveira

3

ライブラリを変更せずに行うことはできません。あなたはLIBを変更することなく、それを行うことができないので、新しいコンストラクタ:)

1

extendクラスを追加し、新しいコンストラクタを作成し、クラスと

+0

しかし、私はプログラム全体をリファクタリングする必要がありますか? – JohnEye

+0

実際のクラスを拡張して新しいクラスを作成し、独自のコンストラクタを追加して使用してください。それで十分だろう。 – Vaandu