Java


JAVA.CLASS.METH.NF : Method Should be final (Java)

要旨

A method should be final, since it is not private, not static, and not overridden in any subclass.

プロパティ

クラス名 Method Should be final (Java)
日本語クラス名 Method Should be final (Java)
クラス分類 信頼性 (reliability)
ニーモニック JAVA.CLASS.METH.NF
カテゴリー
CWE CWE:493 Critical Public Variable Without Final Modifier
対応言語 Java で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで無効になっています。チェックを有効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += allow class="Method Should be final (Java)"

// C.java 
public class C {
  private static int counter;
  private int id = getNextId();

  @Override
  public String toString() {                                // ok: overridden in Sub
      return "#" + getId();
  }

  protected int getId() {                    // "Method Should be final (Java)" warning issued here
      return id;
  }

  private int getNextId() {                                 // ok: private
    return counter++;
  }

  public static int getNumberOfInstances() {                // ok: static
      return counter;
  }
}
// Sub.java 
public class Sub extends C {

  @Override
  public String toString() {                 // "Method Should be final (Java)" warning issued here
    return "sub" + super.toString();
  }
}

In this example, the programmer should make those two methods final, as follows.

// after modification 
public class C {
  private static int counter;
  private int id = getNextId();

  @Override
  public String toString() {
      return "#" + getId();
  }

  protected final int getId() {
      return id;
  }

  private int getNextId() {
      return counter++;
  }

  public static int getNumberOfInstances() {
      return counter;
  }
}

public class Sub extends C {

  @Override
  public final String toString() {
      return "sub" + super.toString();
  }
}

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。