Loading article…
Javaプログラミング言語では、ヒープ汚染とは、パラメータ化された型の変数がそのパラメータ化された型ではないオブジェクトを参照するときに発生する状況です。[1]この状況は通常、コンパイル時に検出され、未チェックの警告で示されます。[1]その後、実行時にヒープ汚染によりClassCast例外が発生することがよくあります。[2]
Javaのヒープ汚染は、型引数と変数が実行時に具体化されていない場合に発生する可能性があります。その結果、異なるパラメータ化された型が実行時に同じクラスまたはインターフェースによって実装されます。特定のジェネリック型宣言のすべての呼び出しは、単一の実行時実装を共有します。これにより、ヒープ汚染が発生する可能性があります。[2]
特定の条件下では、パラメータ化された型の変数は、そのパラメータ化された型ではないオブジェクトを参照する場合があります。変数は常に、パラメータ化された型を実装するクラスのインスタンスであるオブジェクトを参照します。
非varargsコンテキストでのヒープ汚染
public class HeapPollutionDemo { public static void main ( String [] args ) { Set s = new TreeSet < Integer > (); Set < String > ss = s ; // 未チェックの警告s . add ( new Integer ( 42 )); // 別の未チェックの警告Iterator < String > iter = ss . iterator ();
while ( iter . hasNext ()) { String str = iter . next (); // ClassCastException がスローされましたSystem . out . println ( str ); } } }
さらに読む
- Gosling, James; Joy, Bill; Steele, Guy; Bracha, Gilad; Buckley, Alex (2014)。「4.12.2」。Java言語仕様、Java SE 8 版。Addison-Wesley。pp. 81–82。ISBN 978-0-13-390069-9。
- ジェフ・フリーセン (2011)。 Java 7 の入門。Java の専門家の声。アプレス。 p. 211.ISBN 978-1430239093。
- リース、リチャード。ジェニファー・リース(2012)。 Java 7 新機能クックブック(PDF)。パックト出版。 38~40ページ。ISBN 978-1-84968-562-7。
- Stenzel, Kurt; Grandy, Holger; Reif, Wolfgang (2008)。「ジェネリックによる Java プログラムの検証」。代数的方法論とソフトウェア技術。コンピュータ サイエンスの講義ノート。第 5140 巻。315 ~ 329 ページ。doi : 10.1007/ 978-3-540-79980-1。ISBN 978-3-540-79979-5。(サブスクリプションが必要です)
参考文献
- ^ ab 「The Java SE Tutorials」。Oracle 。 2014年7月16日閲覧。
- ^ ab Langer, Angelika. 「Java Generics FAQs: Heap pollution」. angelikalanger.com/ . 2014 年7 月 15 日閲覧。
