BlueJを使用して、HashMapクラスをテストして動作を確認しています。以下は、私がクラスをテストするために使用したコードです。コンストラクタでfillMyMap()
メソッドを呼び出す最初の試みの間、23行目にスローされるエラーがあります。Java HashMapクラスがNullPointerExceptionをスローする
コンストラクタ内のfillMyMap()
への呼び出しを削除しようとしました。 HashMapTesterオブジェクトはインスタンス化されていますが、そのメソッドを明示的に呼び出すと同じNullPointerException
がスローされます。
IはmyMap
変数宣言を書き換えるが、コンパイルの失敗に異なる構文結果を使用してみました。
他のHashMap
コード(たとえば、Objects First with BlueJ)をテストしたところ、そのコードは正常に動作しているため、ライブラリ、クラス、またはパッケージに問題はありません。
私は変数を変更しようとしましたが、私は誤って予約語を打ちました。同じ結果です。このコードで何が問題になっていますか?
import java.util.HashMap;
public class HashMapTester
{
//Fields
public HashMap<String, String> myMap;
// The constructor is supposed to construct a new
// HashMap object with variable name myMap.
// The fillMyMap() method call simply fills the HashMap
// with data prior to testing it.
public HashMapTester()
{
HashMap<String, String> myMap = new HashMap<String, String>();
fillMyMap();
}
// fillMyMap() methods is supposed to fill up
// the keys and values of the HashMap<String, String>
// object.
public void fillMyMap()
{
myMap.put("doe", "A deer...a female deer."); //<-- ERROR OCCURS HERE!
myMap.put("ray", "A drop of golden sun.");
myMap.put("me", "A name I call myself.");
myMap.put("fah", "A long, long way to run.");
myMap.put("sew", "A needle sewing thread.");
myMap.put("la", "A note to follow sew.");
myMap.put("tea", "It goes with jam and bread.");
}
public String sing(String note)
{
String song = myMap.get(note);
return song;
}
}
ありがとうございました!今は完璧に動作します。 – Andy
私は 'this'キーワードを削除することによっても動作させることができました。 – Andy
はい、この場合は必要ありません。名前をあいまいにするだけでよいでしょう。例えば、コンストラクタにも 'myMap'という名前のパラメータがあるとします。 'this.myMap'はクラスフィールドを参照し、単に' myMap'がパラメータを参照します。あなたの例では 'myMap'という名前の変数が1つしかないので、これは必要ではありません –