2010-04-04 5 views
0

Java에 true/false를 반환하는 C 스타일 함수를 적용 할 때 가장 좋은 방법은 무엇입니까?true/false를 반환하는 메서드 적용

다음은 문제가있는 위치를 보여주는 간단한 방법입니다. 아마 파일을 (이것에 의견을 주시기 바랍니다) 필터링의 더 우아한 방법이 있다는

public static boolean fileNameEndsWithExtension(String filename, String fileExtension) { 
    return filename.endsWith(fileExtension); 
} 

참고.

  1. 반환 파일 이름이 null의 경우 잘못된 : 파일 이름이 null 값 어쨌든, 하나는 무엇입니까? 그렇다면 파일 이름이 null 인 경우와 String 또는 파일 이름이 주어진 파일 확장자로 끝나지 않는 경우를 구분하는 방법은 무엇입니까?
  2. 반환 유형을 null 값을 허용하는 부울 클래스 부울로 변경합니다.
  3. Exception을 던지고 프로그래머가 null 값이 절대로 메서드에 전달되지 않도록해야합니까?
  4. 다른 해결책을 사용 하시겠습니까?
+1

이 가능한 옵션 http://stackoverflow.com/questions/135845/are-booleans-as-method-arguments-unacceptable/135871#135871 (4)를 참조 – skaffman

+0

는 skaffman 감사드립니다. –

답변

7

filename이 null 인 경우 NullPointerException 또는 IllegalArgumentException을 발생시켜야합니다. 나는 최선을 결정하도록 내버려 둘 것입니다. IllegalArgumentException or NullPointerException for a null parameter?

+1

당연히 그대로두면 이미 적절한 'NullPointerException'을 얻을 수 있습니다. 나는 아마 더 이상 신경 쓰지 않을 것입니다. 옵션 1과 2는 끔찍한데, 나중에 디버그하기가 어려울 때까지 오류를 연기하기 때문입니다. – bobince

+1

NPE vs IAE : NPE는 표준 라이브러리를 통해 널리 사용 되었기 때문에 인수가 불법적으로 'null'임을 알리기 때문에 NPE를 권장합니다. 자바 7은 한 줄의 널 (null) 검사와 할당을위한 유틸리티 메소드를 가질'java.util.Objects'를 도입 할 것이다 (인수가 널인 경우 NPE를 제공). NPE는 단순히이를 수행하는 방법이되었습니다. 관련 RFE : http://bugs.sun.com/view_bug.do?bug_id=6889858 – gustafc

+0

듣기 좋습니다. null 값을 확인하는 유틸리티 메소드가 필요 없게됩니다. –

3

당신은 당신의 특정 응용 프로그램의 문제 영역에서 의미가 무엇 :

은 파일 이름의 빈 세트 확장자로 끝나는 말을 의미가 경우
  1. , true를 돌려줍니다.
  2. 파일 이름의 빈 집합이 확장자없이 끝난다는 것이 합리적이라면 false를 반환합니다.
  3. 아무도이 질문을하지 말아야한다고 말하는 것이 맞으면 코드를 던지십시오.
  4. 3 값 결과를 가지려면 반드시 부울을 사용하십시오.
  5. 3 값 열거 형을 만들고 그 값을 반환하십시오.

대개의 경우 옵션 3은 유용하지만 여기서는 아무도 응용 프로그램에 다른 응용 프로그램의 적용 가능성을 배제 할 수 없습니다. 정당한 이유로 많은 의미있는 파일 이름을 전달하면 다른 파일 이름 중 하나를 선택하는 것이 좋습니다.

2

나는 1이나 3을 사용할 것입니다. NullPointerExceptions를 던지거나 최소한 assert을 사용하는 것이 좋습니다.

nullable Boolean을 반환하면 대개 가치가있는 것보다 더 많은 문제가 발생하므로 null을 확인해야합니다. fileNameEndsWithExtension()은 올바른 파일 이름을 알고있을 때만 사용할 수있는 함수처럼 보입니다.

fileExtension도 null 일 수 있음을 잊지 마시기 바랍니다.

1
  1. return true IFF 파일 이름.endsWith (fileExtension)

filename이 null 인 경우 false를 반환하고 null과 다른 일치하지 않는 값을 구별하지 않아도됩니다.

null 파일 이름이 명확하게 확인되고 처리되어야하는 별개의 상태 인 경우, 바람직하게는 endsWith()를 확인하기 전에 별도로 유효성을 검사해야하지만 불필요한 런타임 예외를 방지하기 위해 endsWith()에 null 검사를 유지해야합니다.

null = false의 동작을 선택하는 이유는 아마도 관계형 데이터베이스의 영향 때문일 수 있습니다. 다음 쿼리는 조건과 일치하는 행만 반환하며 다른 모든 항목 (nulls 및 mismatches)은 무시됩니다.

select * from filenames 
where filename like '&fileExtension'; 
+0

이전에 익숙했던대로 추론을 이해합니다. 덧붙여서, JQL/JPA/Hibernate를 사용하는 getResult()는 null 값 (대개 List에 할당 됨)을 반환합니다. –

관련 문제