2012-07-27 19 views
5

ソフトウェア開発では、すべてソフトウェアプロバイダによるライブラリを使用しています。クラスAでは、x、y、zという4つの関数があると考えてください。私は自分の開発チームが関数xを使わないようにしたい。そのため、使用しないように指示するのではなく、アイデアを見つけました。クラスを継承してすべての関数をオーバーライドし、関数xに対してunsupportedmethod例外がスローされ、残りの場合はスーパーメソッドが呼び出されます。また、私は問題が見つかりました、開発者は直接使用されているクラスAを回避する方法、直接ベースクラスを使用することができます。私はOSGiで同様の機能を見つけました。libバンドルは持ち込まれ、その後はエクスポートされません。これはJavaを達成するための方法はありますか?Javaライブラリの再利用

+0

ソースを編集できないと思いますか? – Jivings

+4

それをサブクラス化して、関数の最初の行にIToldYouNotToUseThisFunctionException例外をスローします。 – Siddharth

+0

あなたは[1] Javaのセキュリティマネージャを見て、この[stackoverflowの記事]を持っている場合があります[1]:http://stackoverflow.com/questions/5486797/how-to-prevent-public-特定のクラスから呼び出されるメソッド/ 5490106#5490106 – Korgen

答えて

0

16進エディタでライブラリクラスファイルを編集し、そのアクセス修飾子をpublicからpackage privateに変更できます。また、名前を変更して継承を使用してこのクラスをラップすることもできます。 Hereあなたはクラスファイルの仕様を見つけることができます。一度私はいくつかの追加のロギングと他の便利なトリックを提供するラッパークラスでjdbcドライバクラスを置き換えるこのテクニックを試してみました。

+0

ほとんどのライセンス契約は「バイナリ」の編集を禁じますか? – aRestless

+0

私はライセンスのエキスパートではありませんが、コンパイル/テスト目的で編集バイナリを受け入れる人もいますか?この場合、プロダクションライブラリはオリジナルのものになります。 – gkuzmin

2

これらの理由から、コードレビューが存在すると思います。第三者のソースを編集できない状況を考えてください。あなたは何をしますか? Siddharthが言っているように、それをサブクラス化して意味のある例外をスローし、それを明確な理由で文書化します。それ以降もベースクラスを使用している人は、ほとんどが無知ではないかもしれませんが、好奇心を逸らす可能性があります。そのようなことは、個人的にも学習の面でも評価できますが、プロジェクトのために開発者はガイドラインに従わなければなりません。

1

複雑なソフトウェアソリューションよりも、自分の開発者に何をすべきかを伝えるだけでよいと思います。時にはシンプルな方が良い場合もあります。

しかし、このパスを控えておけば、Springユーザーの場合は、アスペクトを使用してアーキテクチャー標準を適用することができます。違法メソッドが呼び出された場合に例外をスローするアスペクトで、問題のメソッドを組み立てます。

0

書式、デッドコード、変数の命名規則など、特定の規則を遵守するためのソースコードをチェックするさまざまなツールがあります。Maven Enforcer plugin,checkstyleおよびPMDがあります。

これにより、特定のメソッド呼び出しを禁止するルールを記述することができます。コンパイル時に自動的にチェックすることができます。残念ながら私が言うことができる限り、上記のツールのどれもが「不法なメソッド呼び出し」をサポートしていません。しかし、PMDを書くには、少なくとも新しいチェックはかなり簡単です。