2016-11-18 4 views
2
othersMap.put("maskedPan", Class.forName("Some Class")); 

この動的クラスローディングの使用を削除します。このクラスの動的ロードを削除するか、このクラスのロードを置き換えるにはどうすればよいですか?

ルール

変更履歴 クラスは 動的にロードされたクラスは、クラスの静的初期化子で実行される悪質なコードが含まれている可能性が動的にロードするべきではありません。 I.そのようなクラスのメソッドをインスタンス化するか、明示的に呼び出す必要はありません。 このルールは、動的クラスローディングを使用するたびに問題を発生させます。 違反コード

String className = System.getProperty("messageClassName"); 
Class clazz = Class.forName(className); // Noncompliant 

+0

あなたは何をしたいのかを説明する必要があります。なぜ動的負荷が最初にそこにあるのでしょうか。それが要件だからです。 –

+1

または、実行時に使用される動的ロードと言うこともできますが、SONARでテストした場合、例外がキャッチされます。どのようにこれを解決するために私は静的ではなく、解決することができませんでした。助けていただければ幸いです。 –

+0

これにはなぜjavascriptタグがありますか? –

答えて

1

一つの選択肢は、そのようなものになるだろうを参照してください:

Class<?> cls; 

switch (System.getProperty("messageClassName")){ 
    case "com.example.Message1": 
    cls = com.example.Message1.class; 
    break; 
... 
} 
+0

それは働いているかどうか? @ k5_私はクラス名を知らないのですか?それはユーザーによって私に提供され、100のクラスがあります。 – Nitul

0

さてあなたは、例えば、ソナールールの裏をかくしようとすることができ

Class.class.getDeclaredMethod("forName", String.class).invoke(null, className); 

それを行うための正しい方法はどのようなあなたの組織でソナーを実行する人々を説得するかである:Class.forName()メソッドを呼び出すためにリフレクションを使用して、私はあなたがそこに間違った問題を解決されるだろう感じていることにより、あなたがする必要があり、彼らはあなたのためのルールの例外を作成する必要があります。または、あなたがそれらを納得させることができないなら、それをやめてください。

+0

SONARが今検出しているかどうかを知らせます。ここではclassNameがこれですか? : 'String className = System.getProperty(" messageClassName ");' –

+1

なぜあなたは 'String.class'を使用しているのですか?少し答えることを教えてください。どうすればこの' class.forname'を置き換えてください。 –

関連する問題