2017-02-08 5 views
1

javaのHashMapの値としてクラスのオブジェクトを作成しようとしています。以下は私のJavaコードですJavaでHashMapを使用したオブジェクト作成

public interface Message { 
    public String nextMessage(String data); 
} 

public class DataMessage implements Message{ 
    private static String[] randomData; 

    public DataMessage(String data) { 
     randomData = data.split(","); 
    } 

    @Override 
    public String nextMessage(String data) { 
     int index = randomIndex.nextInt(randomData.length-1); 
     return randomData[index]; 
    } 
} 

私はそのオブジェクトにアクセスするとnullを返します。つまり、nullポインタ例外をスローします。

public class MyMessage { 

    public MyMessage() { 
    } 

    public static void main() { 
     HashMap<String,Message> hash = new HashMap<String,Message>(); 
     if (some condition) { 
      hash.put(key,new DataMessage("this is my data")); 
     } 

     <some code> 

     hash.get(key).nextMessage(); 
     //Throws nullpointer exception 
    } 
} 

誰でもなぜこれが起こっているを理解するために私を助けてください:

は、私は以下のようにそのオブジェクトにアクセスするためにしようとしていますか?

私は初心者ですが、このアプローチのパフォーマンスを改善しようとしています。もしあれば、より良いアプローチを提案してください。

+1

"key"は、初期化されずに2回使用されます。 –

+0

あなたの "鍵"をインスタンス化したと仮定すると、おそらく何かがあなたのif条件の入力を妨げているでしょう。あなたのハッシュマップに本当にケットが入っていることを確認してください。 –

答えて

0

私はあなたがhash.get(key).nextMessage();を使用しようとすると、あなたがそうnull.nextMessage();

を作ることができないので、最初の部分hash.get(key)がヌルであるため、ので、あなたのHashMapはあなたがNullPointExceptionを取得し、常にそのための空であるあなたがあなたにif(){}にアクセスすることはできませんだと思います問題を解決するには、HashMapが空でなく、このキーを持つ要素があることを確認してください。私はこの方法では、いくつかのことかvoid返す必要がありますたとえば、あなたの機能にいくつかの誤りがあると思う

if (hash .containsKey(key)) { 
    //key exists 
    hash.get(key).nextMessage(); 
} else { 
    //key does not exists 
    System.out.println("No key exist"); 
} 

public RandomData(String data) { 
    randomData = data.split(","); 
} 

が、これはあなたを助けることができる願っています。

+0

違いに気づいてくれてありがとう。独自のコードを汎用のコードに置き換えながら、コンストラクター名を置き換えられませんでした。今更新されました:) ハッシュマップには多くのレコードがあります。目的を理解するだけで、サンプルコードを書いています。私はコードをデバッグし、hashmapが空ではないことを確認しました。 – user3150037

+0

yes @ user3150037あなたのハッシュマップが空ではないかもしれないが、ハッシュマップにこのキーを持つ要素があるかどうかをチェックする必要があるかどうかを確認する必要があります。あなたはそれを得る方法NullPointExceptionを取得します –

関連する問題