문제

누군가 내 방법을 호출하면 나는 문제를 방어적으로 처리하고 싶습니다.보통은 그냥 돌아오는데 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;

스택이 비어 있지 않으면 요소를 반환하고 싶습니다.스택의 경우 ~이다 비어 있으면 다음을 사용하면 null 반환을 피할 수 있습니까? try-catch?

도움이 되었습니까?

해결책

메서드는 무언가를 반환하거나 예외를 발생시켜야 합니다.제한되지 않은 일반 유형이 있는 경우 null 객체 패턴과 같은 것을 사용할 수 없으므로 옵션이 반환됩니다. null, 다음을 포함하는 것을 반환합니다. T 좋다 Optional<T>, 또는 예외를 발생시킵니다.

안전이 마음에 들지 않는다면 null, 당신이 사용할 수있는 Optional, Java 8 또는 라이브러리에서.확인된 예외는 안전성이 유사하지만 여기서는 부적절합니다.

다른 팁

이것이 내가 문제에 접근하는 방법입니다.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[size] 배열이 null이거나 크기가 배열 길이를 벗어나지 않는 한 예외가 발생합니다.따라서 다음과 같이 할 수 있습니다.

 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