次のメソッドをArrayListに実装していますが、例外の処理方法についてはわかりません。 ArrayListが空の場合、自動的にその例外がスローされるか、メソッドに何かを書く必要がありますか?Javaのメソッド宣言の例外
public T removeLast() throws EmptyCollectionException
{
//TODO: Implement this.
}
次のメソッドをArrayListに実装していますが、例外の処理方法についてはわかりません。 ArrayListが空の場合、自動的にその例外がスローされるか、メソッドに何かを書く必要がありますか?Javaのメソッド宣言の例外
public T removeLast() throws EmptyCollectionException
{
//TODO: Implement this.
}
例外はスロー可能オブジェクトを拡張しています。 あなた自身が
if(list.isEmpty()){
throw new EmptyCollectionException("possibly a message here");
} else {
//your logic here to return a T
}
あなたは例外をスローする必要が自分をArrayList
が空の場合。メソッドシグネチャに
throws EmptyCollectionExceptio
句はremoveLast()
が例外をスローする可能性がある(そして適切に処理しなければならない)こと、呼び出すコードため、唯一のリマインダーです。
EmptyCollectionExceptionは既存の例外ではありません。新しい例外定義:
if(list.IsEmpty()){
throw new EmptyCollectionException("message");
}
またはその代わりにはIndexOutOfBoundsExceptionを使用し、あなたもtry catch
ブロックを使用することができます。
try{
//Whatever could cause the exception
}catch(IndexOutOfBoundsException e){
//Handle the exception
//e.printStackTrace();
}
私には、JDKのEmptyCollectionExceptionが見つかりました。どのようにそれをスローするつもりですか? http://docs.oracle.com/javase/7/docs/api – ControlAltDel
@ControlAltDel IndexOutOfBoundsExceptionを使用しています。 –
あなたはこの方法では満たされていないので、私たちは確かに言うことはできません。 ArrayList.remove(0)を使用した場合。空のリストでは、それはあなたにIndexOutOfBoundsExceptionを与えるでしょう
いずれにしても、あなたはあなたのカスタム例外を投げることはありません。これは、メソッドの先頭で行うことができます。
public T removeLast() throws EmptyCollectionException
{
if (myList.size() == 0) throw new EmptyCollectionException("List Is Empty");
... //otherwise...
}
まず、あなたがdefine your custom exceptionする必要があることを書くでしょう。その可能性があります:
他の回答のように例外をスローすることができます。
public T removeLast() throws EmptyCollectionException
{
if (myList.size() == 0) throw new EmptyCollectionException("List Is Empty");
... //otherwise...
}
正しいですが、elseは愚かです;-)より良い代替方法については、ControlAltDel answerを参照してください。 –