2011-07-14 56 views
1

クラスにメソッドがあり、このクラスを使用してjarファイルが作成されます。 jarファイルはプロジェクトに含まれています。アプリケーションでこのメソッドをオーバーライドするにはどうすればよいですか?助けてくださいjarファイルのメソッドをオーバーライドする方法は?

+2

あなたが正確に何を意味するのかを見て?あなたは通常、サブクラスを作成し、通常通りメソッドをオーバーライドします... –

+0

私は彼/彼女は既存のメソッドを変更することを意味すると思います。確かにわかりません... –

答えて

1

@パブロ・サンタクルスは正しい(+1):既存のコードを変更することはできません。既存のクラスを継承し、サブクラスで必要なものをオーバーライドする必要があります。

しかし、実際には既存のコンパイル済みモジュールで何かを変更したい場合は、バイトコード変更技術を使用して変更することができます。これを行うことができるパッケージがたくさんあります。 Java AspectJのためのアスペクト指向のパラダイムを実装する人気の高い上位パッケージも役に立ちます。

しかし、私はあなたが本当にこれを必要としないと信じています。

1

JARの中でクラスをサブクラス化し、メソッドをオーバーライドする必要があります。ソースコードを変更して再コンパイルしない限り、既存のJavaクラスのメソッドを "変更"する方法はありません。

+1

完全性のために:技術的に、そのクラス(Javaエージェント、負荷時間ウィービングなど)を変更することはできますが、この初心者レベルで質問する人にはお勧めできません。 –

+0

@Sean:ありがとう!それを知らなかった。 Javaエージェント、ロード時間ウィービングなどを見て読んでみましょう。 –

0

現在の動作を「パッチ」することを意味する場合は、既存のJavaファイルをコピーし、オーバーライドするメソッドを更新し、その.classをCLASSPATHに先に置く必要があります。

0

クラスから継承してオーバーライドする(つまり多態的な観点から)メソッドをオーバーライドする場合は、クラスが最終的なものでない限り、他の方法と同様に継承することができます。

jarファイル自体の内部でメソッドの動作を変更する場合は、ソースを取得し、メソッドを自分で変更してから再コンパイルし、別のjarファイルに再パッケージする必要があります。しかし、実際にはjarが一般的なライブラリjarである場合は、特にこの方法をお勧めしません。後であなたのコードを管理する人は、ライブラリクラスの動作が変更された場合、本当に混乱したり、ハックされたりします。

ソースがない場合は、バイトコードをハックしてそのようにすることができます。しかし、私はそれはあなたがすでにロードされたクラスのメソッドをオーバーライドすることを考えている場合は

関連する問題