2013-04-29 5 views
5

開発者がJDKの一部であるJavaクラスを拡張して新しいメソッドを追加する場合、将来のバージョンのJavaで同じ名前/シグネチャを持つメソッドが導入される可能性があります。これらの将来のバージョンで実行されます。誰かが新しいバージョンのJDKでコードをコンパイルしたときに起こりうる問題を検出する "非上書き"アノテーション(http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7152222を参照)がないため、開発者はこのチェックを別の方法で行う必要があります。 どのアプローチを使用していますか?将来のJavaバージョンへの更新を活用するために、独自のプログラムでどのようなアプローチを使用しますか?

+0

どのJavaクラスを拡張しようとしていますか?たぶんあなたがユースケースをより詳細に指定できるかどうかについてのアドバイスがあります。 – vikingsteve

+0

getType()メソッドがJDK7で導入されたJDK6からJDK7への移行中に問題が発生しました。私たちのコードには、既にgetType()メソッドを持っていたjava.awt.Windowを拡張したクラスがいくつかありました。 – mschenk74

答えて

13

JDKのクラスを拡張するための反パターンですが、拡張するために特別に設計されたクラスは例外です。代わりに、Decoratorパターンを使用して、JDKクラスに機能を追加する必要があります。 JDKは特別なケースではありません。これはサードパーティのライブラリでも同様です。

+0

+1 - 今後拡張される予定のないクラスを拡張する方法はありません。最善のアプローチ?まったくやってはいけません! –

+0

具体的なJDKクラスはjava.awt.Windowであり、具体的なメソッドはgetType()でした。一般的に私はあなたに同意しますが、この特別なケースではWindowクラスを拡張することが唯一の可能性であると思います。 – mschenk74

+0

@ mschenk74 'Window'は完全なGUIコンテナクラス階層の基底であるため、サブクラス化しても何を達成するのか分かりません。残りのJDKは' Windowあなたのカスタムサブクラスからではありません。 –

0

継承は強力な手法ですが、知識が不足すると悪化する可能性があります。したがって、この場合は継承の代わりに合成を使用する必要があります。拡張する任意のjavaクラスのオブジェクトを含むクラスを作成し、そのクラスをorignalクラスではなく新しく作成したクラスに拡張します。

関連する問題