質問

誰かが私の方法を呼び出すならば、私は問題に防御的に対処したいです。通常は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>(); 
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top