2017-01-06 9 views
2

クラスに機能を追加しようとしています。CustomListは、JListに拡張されています。現在、CustomListの現在のすべての使用法は、オーバーライドされていないメソッドsetModel(Listmodel<E> lm)JListから呼び出します。私は古いバージョンのJava、Java 1.6に取り残されています。これは、消去の問題のためにこのメソッドを直接オーバーライドすることはできません。私の研究では、このメソッドの名前を変更して、現在のすべての用途を新しく名前を付けたメソッドに置き換える必要があるという結論に至りました。Java APIのメソッドをローカルプロジェクトで非推奨と宣言するにはどうすればよいですか?

ではなく、CustomListでこのメソッドを呼び出す必要があると警告します。自分のプロジェクトのネイティブメソッドをローカルで非推奨にする方法がわかりません。私の新しい方法を概説

簡単な例を以下に示します。

public class CustomList<E> extends JList { 
    private ArrayList list; 
    public void newSetModel (ListModel<E> lm){ 
     super.setModel(lm); 
     list = new ArrayList<Boolean> (lm.getSize()); 
    } 
} 

が、私はそこ

+0

"これは消去の問題のためにこのメソッドを直接オーバーライドできません"。私はこれについて聞いていない。あなたはそれが不可能であると確信していますか? – Michael

+0

クラスの宣言をpublicクラスに変更することを除いて、私が読んで試みたすべてがコンパイルの問題を作成しました。CustomList はJList を拡張しますが、この宣言はJava 1.6では使用できません。私は個人的には100%ではありません。それは不可能であり、そうでなければ実証されたいと思っています。オーバーライドが最適な解決策であり、私の元の質問の必要性を完全に取り除くでしょう。 – Maverick

+0

'public void setModel(ListModel lm)'の何が問題なのですか(パラメータリストからを削除しますか?) – Michael

答えて

1

のJava 1.6で立ち往生しておりますので、オーバーライドを許可するように拡張するには、私は単にJListのが一般的なことはできませんのでご注意くださいJavaでそれを行うにはうってつけの方法ではありません。

理想的には、ビルド/ CIプロセスがあり、ポリシー施行用のツールを使用することができます。 Checkstyle & PMDを見てください。おそらくそれらのうちの1つで、特定のメソッド呼び出しをブラックリストに載せることができます。

それができないと、asmやaspectjのような低レベルの技術を使って自分の小切手を書くことはできますが、それは容易ではありません。あるいは、古い学校に行って、ソースファイルを解析して悪いメソッド呼び出しを探すテストを書くことができますが、それはエラーが起こりやすいです。

他のチームメンバーに知らせることをお勧めします。あなたはコードレビューをやっていますか?あなたがすべき。

+1

これは私が疑ったものですが、そうでないことを望みます。誰かがこれに当てはまる場合は、私は受け入れられた答えを変更します。 – Maverick

関連する問題