반환 null; 예외가 잡힐 수 있기 때문에 필요하지만 그러한 경우에는 이미 null인지 확인했기 때문에 (그리고 우리가 호출하는 클래스가 복제를 지원한다는 것을 알고 있다고 가정) try 문이 절대 실패하지 않을 것임을 알 수 있습니다.
try
진술이 결코 실패 할 수 없다는 것을 알고있는 방식으로 관련된 입력에 대한 세부 사항을 알고 있다면 그것을 갖는 요점은 무엇입니까? try
모든 것이 항상 성공할 것이라는 것을 알고 있다면 피하십시오 (코드베이스의 전체 수명 동안 절대적으로 확신 할 수있는 경우는 드뭅니다).
어쨌든 컴파일러는 안타깝게도 마인드 리더가 아닙니다. 그것은 함수와 그 입력을보고, 그것이 가지고있는 정보가 주어지면, return
당신이 가지고있는 것처럼 맨 아래에 그 문이 필요합니다.
구문을 충족하고 컴파일 오류를 피하기 위해 끝에 추가 return 문을 넣는 것이 나쁜 습관입니까 (주석에 도달하지 않을 것임을 설명하는 주석 포함), 아니면 이와 같은 코드를 작성하는 더 좋은 방법이 있습니까? return 문이 필요하지 않습니까?
정반대로, 컴파일러 경고를 피하는 것이 좋습니다. 예를 들어 코드 한 줄이 추가로 드는 경우에도 마찬가지입니다. 여기서 줄 수에 대해 너무 걱정하지 마십시오. 테스트를 통해 기능의 신뢰성을 확립 한 후 계속 진행하십시오. return
문장을 생략 할 수 있다고 가정하고, 1 년 후 해당 코드로 돌아온 것을 상상 한 다음 return
, 맨 아래에있는 해당 문장이 가능한 가정으로 인해 생략 된 이유에 대한 세부 사항을 자세히 설명하는 일부 주석보다 더 많은 혼란을 유발할 것인지 결정하십시오. 입력 매개 변수에 대해 확인하십시오. 아마도 그 return
진술은 다루기가 더 쉬울 것입니다.
즉,이 부분에 대해 구체적으로 설명합니다.
try {
return a.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
...
return null;
여기 예외 처리 사고 방식에 약간 이상한 점이 있다고 생각합니다. 일반적으로 응답으로 할 수있는 의미있는 작업이있는 사이트에서 예외를 삼키기를 원합니다.
try/catch
트랜잭션 메커니즘으로 생각할 수 있습니다 . try
이러한 변경 작업이 실패하고 catch
블록 으로 분기되는 catch
경우 롤백 및 복구 프로세스의 일부로 이에 대한 응답 으로이 작업을 수행합니다 (블록에있는 모든 작업).
이 경우 단순히 스택 트레이스를 인쇄 한 다음 강제로 null을 반환하도록하는 것은 트랜잭션 / 복구 사고 방식이 아닙니다. 코드는 오류 처리 책임을 모든 코드 호출에 전달 getClone
하여 수동으로 실패를 확인합니다. 당신은 CloneNotSupportedException
그것을 잡아서 더 의미있는 다른 형태의 예외로 변환하고 그것을 던지는 것을 선호 할 수 있지만, 이것은 트랜잭션 복구 사이트와 같지 않기 때문에 단순히 예외를 삼키고 null을 반환하고 싶지는 않습니다.
예외를 던지면 이것을 피할 때 수동으로 실패를 확인하고 처리하기 위해 호출자에게 책임이 누출됩니다.
파일을로드하는 것과 비슷합니다. 이는 높은 수준의 트랜잭션입니다. try/catch
거기있을 수도 있습니다 . trying
파일을로드하는 동안 개체를 복제 할 수 있습니다. 이 상위 수준 작업 (파일로드)에서 오류가 발생하는 경우 일반적으로이 최상위 트랜잭션 try/catch
블록 까지 예외를 발생시켜 파일로드 오류로부터 정상적으로 복구 할 수 있습니다 ( 복제 또는 기타 오류로 인해). 따라서 우리는 일반적으로 이와 같은 세분화 된 장소에서 예외를 삼키고 나서 null을 반환하는 것을 원하지 않습니다. 예를 들어 예외의 많은 가치와 목적을 무너 뜨리기 때문입니다. 대신 우리는 의미있게 처리 할 수있는 사이트로 예외를 전파하고 싶습니다.
Object
매개 변수를 사용합니다. 경우a
지지대 클래스없는clone
방법을 (또는이에 정의Object
?) 또는 오류가 발생했을 경우clone
법 (또는 내가 지금 생각할 수있는 다른 실수), 예외가 발생 될 수 있으며 당신이 도달 할 것이라고는 반환 문.