[解決済み] コンストラクタの警告で漏れる
質問
私は、Netbeans 6.9.1の警告を(ほとんど)避けたいと思っています。
'Leaking this in constructor'
警告があります。
コンストラクタでメソッドを呼び、"を渡すという問題は理解できました。
this
"は危険です、なぜなら"
this
は完全に初期化されていない可能性があるため、危険です。
コンストラクタはプライベートで、同じクラスからしか呼び出されないので、私のシングルトンクラスの警告を修正するのは簡単でした。
古いコード(簡略化)です。
private Singleton() {
...
addWindowFocusListener(this);
}
public static Singleton getInstance() {
...
instance = new Singleton();
...
}
新しいコード(簡略化)。
private Singleton() {
...
}
public static Singleton getInstance() {
...
instance = new Singleton();
addWindowFocusListener( instance );
...
}
コンストラクタがpublicで他のクラスから呼び出される可能性がある場合、この修正はうまくいきません。どのようにすれば、以下のコードを修正することができるでしょうか。
public class MyClass {
...
List<MyClass> instances = new ArrayList<MyClass>();
...
public MyClass() {
...
instances.add(this);
}
}
もちろん、私はこのクラスを使っているすべてのコードを修正する必要がないような修正を望んでいます(たとえばinitメソッドを呼び出すことで)。
どのように解決するのですか?
というように
instances.add(this)
をコンストラクタの末尾に置いたので
の警告を表示しないようにコンパイラに指示しても問題ないでしょう。
(*)
. 警告はその性質上、必ずしも何か問題があることを意味するものではなく、注意を要するだけです。
もし自分が何をしているのかわかっていれば
@SuppressWarnings
アノテーションを使用することができます。Terrelが彼のコメントで言及したように、NetBeans 6.9.1では以下のアノテーションがそれを行う。
@SuppressWarnings("LeakingThisInConstructor")
(*) 更新しました。 IstharとSergeyが指摘したように、quot;leaking"コンストラクタのコードが(あなたの質問のように)完全に安全に見えてもそうでない場合があります。これを承認してくれる読者はもっといるのでしょうか?私は言及された理由でこの回答を削除することを検討しています。
関連
-
[解決済み] C++で、あるコンストラクタを別のコンストラクタから呼び出す(コンストラクタ・チェイニングを行う)ことは可能ですか?
-
-bash: java: コマンドが見つからない 解決方法
-
ApiModel と @ApiModelProperty の使用法
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] C#でベースコンストラクタを呼び出す
-
[解決済み] コールバック内で正しい `this` にアクセスする方法
-
[解決済み] コンストラクタ内の仮想メンバー呼び出し
-
[解決済み] あるコンストラクタを別のコンストラクタから呼び出す
-
[解決済み] AngularJS コントローラにおける 'this' と $scope の比較
-
[解決済み] Javaインターフェースでスタティックメソッドを定義できないのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
[解決済み] Javaはコンストラクタでこれをリークする【重複】。
-
undefined[sonar] sonar:デフォルトのスキャンルール
-
Javaでよくある構文エラー
-
Java の switch case 文で必要な定数式の問題の解決法
-
ジャバアレイ
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
コンストラクタDate()が未定義である問題
-
eclipse 実行 Java、エラー: 選択を起動できず、レシーバーもありません。
-
org.xml.sax.SAXParseExceptionのエラー解決方法