try catch가 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;
스택이 비어 있지 않으면 요소를 반환하고 싶습니다.스택의 경우 ~이다 비어 있으면 다음을 사용하면 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>();