1

を返すメソッドがありますArrayList <Integer>。私がそれを返すと、そのnullの場合、nullPointerException. 今、私は何らかの検証を行い、null ポインター例外の発生を防ぎたいと考えています。

これらは私が試したものですが、それでもnullpointerexception

Map<Integer,ArrayList<Integer>> personMap = new HashMap<Integer,ArrayList<Integer>>();

public ArrayList<Integer> method(int departmentID){
  if (personMap.get(new Integer(departmentID)) !=null)
     return personMap.get(new Integer(departmentID));
  else 
     return null;


}

私はまだ取得しnullPointerExceptionます。

アプローチ2。

public ArrayList<Integer> method(int departmentID){
  if (personMap.get(new Integer(departmentID)).isEmpty()) return null;
  else return personMap.get(new Integer(departmentID));


}

私はまだ取得しnullpointerexceptionます。誰かがこれを解決するのを手伝ってくれますか?

Testing クラスから、次のようにメソッドを呼び出します。

Class1 cl = new Class1();

if (c1.method(112121)) // do something
4

4 に答える 4

4

まず第一に、あなたのMap宣言はコンパイルされません:-

Map<Integer,ArrayList<Integer>> personMap = new ArrayList<Integer,ArrayList<Integer>>();

new HashMap<Integer,ArrayList<Integer>>();あなたはRHSにいるはずです。

第二に、あなたのifステートメントは再びコンパイルされません:-

if (c1.method(112121))

はを返しmethod()ますが、ArrayListでは、の条件としてJavaのみ値を持つことができます。booleanif


必要な変更:-

ifを次のように変更する必要があります:-

if (c1.method(112121) != null)

最初の方法を使用します。

実際、そこは必要ありませんif-else。マップから値を返すだけです。-

public ArrayList<Integer> method(int departmentID){ 
     return personMap.get(new Integer(departmentID));
}

これでnull、キーがにない場合はを返し、そうでない場合はHashMap対応するを返しArrayListます。

于 2012-12-19T08:23:37.117 に答える
1

マップにキーのエントリがない場合は、 をget()返しますnull
その後、それを呼び出すと.isEmpty()、NPE が取得されます。

代わりに、map.get(key) == nullまたはそれ以上をテストし、!map.contains(key)

于 2012-12-19T08:22:10.980 に答える
0

まず第一に、メソッドからnullを返すことはお勧めしません。空のArrayListを返す必要があります。

Map<Integer,ArrayList<Integer>> personMap = new HashMap<Integer, ArrayList<Integer>> ();

public ArrayList<Integer> someMethod(int departmentID){

    if (personMap.get(departmentID) !=null)
        return personMap.get(departmentID);
    else
        return new ArrayList<Integer>();

}
于 2012-12-19T08:43:29.567 に答える
0

最初のアプローチは次と同じです。

public ArrayList<Integer> method(int departmentID){
    return personMap.get(new Integer(departmentID));
}

そして2番目のものは明らかにNPEを投げることができます:

public ArrayList<Integer> method(int departmentID){
  if (personMap.get(new Integer(departmentID)).isEmpty()) return null;
  else return personMap.get(new Integer(departmentID));
}

null を返す場合personMap.get(new Integer(departmentID))(マップにこのキーのエントリがない場合)、そのメソッドを呼び出すと NPE がスローされます。

if (personMap.get(new Integer(departmentID)).isEmpty())

于 2012-12-19T08:27:54.150 に答える