NULLを返すのを停止することは可能ですか
-
21-12-2019 - |
質問
誰かが私の方法を呼び出すならば、私は問題に防御的に対処したいです。通常はnull
を返します。
try
catch
を実装することにしましたが、とにかくnull
を返すだけで終わったように見えます。
try
の既に作成されていないように、catch
を返していないように、null
を返しますか?
スタッククラスのpeek
を使用してサンプルコード。
public T peek()
{
T temp = null;
try
{
temp = array[size];
}
catch(Exception e)
{
}
return temp;
}
.
空のスタックで呼び出された場合。それはnull
を返します。
それで、このようなケースのtry
catch
でさえ邪魔する必要がありますか?私はこれをやろうと思います:
if(isEmpty())
return null;
.
スタックが空でない場合は、要素を返します。スタックが空の場合、try-catch
を使用するとNULLを返さないでください。
解決
この方法は何かを返すか、例外を投げる必要があります。無制限の汎用タイプがある場合は、NULLオブジェクトパターンのようなものを使用できないため、オプションはnull
を返しているため、T
のようなOptional<T>
を含むものを返すか、または例外をスローしてください。
null
の安全性が気に入らない場合は、Java 8またはライブラリからOptional
を使用できます。チェックされた例外には同様の安全性がありますが、ここでは不適切です。
他のヒント
これは私が問題にどのように近づくかです。PEEK関数で例外を投げることによって、その例外を発信者に取り扱う義務を置きます。どうして?私は爆発をできるだけ大きく爆発させるというエラーが欲しいからです。PEEK法も小さくなった。また、あなたがすでに同意しているように、NULLを返します。
public T peek() throws IndexOutOfBoundsException
{
return array[size];
}
.
と
try
{
T top = thestack.peek();
/* Do something with that object */
}
catch(IndexOutOfBoundsException e)
{
/* Do something else */
}
. ArrayがNULLまたはサイズが配列の長さの外側にある限り、Exceptionをスローしていることを想像するのは難しいです。だから、あなたはこのようなことができる -
if (array != null && array.length > size) {
return array[size - 1]; // assuming your size starts at 1
}
return null; // need to return something, if not null you need an option type.
.
編集
またはオプションモナド - そしてそのようなもの、
if (array != null && array.length > size) {
return new Some<T>(array[size - 1]); // assuming your size starts at 1
}
return new None<T>();
.