2012-02-17 2 views
0

를 슬로우 선언해야 내 클라이언트 코드 :보고되지 않은 예외 java.io FileNotFoundException; 잡은 또는

public static void inputFiles() 
{ 

    File inputFile = new File("colors2.txt"); 
    if (!inputFile.exists()) { 
     throw new FileNotFoundException(("File not found")); 
    } 
    ColorSet colorSetter = new ColorSet(inputFile); 
} 

내 공급 업체 클래스 생성자 :

내가 FileNotFoundException이 java.io의 "보고되지 않은 예외가 점점 계속
public ColorSet(File source) throws FileNotFoundException 
{ 
    if (!source.exists()) { 
     throw new FileNotFoundException(("File not found")); 
    } 
    colorInput = source; 
} 

가, 잡힐해야하며 던져 지겠다고 선언했습니다. "

나는 클라이언트 메소드에서 그것을 잡으려고 시도했지만, body 블록에서 호출 할 수 없다는 것을 말하고있다.

답변

1

inputFiles()

+0

내 클라이언트 메소드의 경우 다음과 같습니다. public static void inputFile() throws FileNotFoundException? – pood

+0

네, 그게해야 할 일입니다 –

2

가 불평하는 이유는 그것이 inputFiles() throws FileNotFoundException를 원하는 것입니다뿐만 아니라 그것을 선언 할 수있다.


당신이 ColorSet의 생성자에있는 경우, 당신이 inputFiles에 필요하고, inputFiles 복수의 이유는 하나 개의 파일을 입력 할 경우에도 이유에 호기심, 말했다.

대체 솔루션은 FileNotFoundException을 던지거나 inputFiles 메소드의 ColorSet 생성자에서 Exception을 catch하지 않는 것입니다.

2

자바에서 확인 된 예외를 throw하는 경우 메서드 서명에서 선언해야합니다. 당신이 인 경우에 대신 당신이 런타임 예외를 던질

try { 
    ColorSet colorSetter = new ColorSet(inputFile); 
} catch (FileNotFoundException fnfe) { 
    // do something sensible with the exception. 
} 

: 당신이 다음 체크 예외를 throw하는 방법 (또는 생성자)를 호출 또한 경우 같은 시도-catch 블록에서 예외를 처리해야합니다 중 당신의 방법이 그것들을 버린다는 것을 선언 할 필요가 없다. 이 경우에는 메서드에 제공된 인수가 유효한지 확인 중이므로 IllegalArgumentException을 사용하는 것이 좋습니다.

또한 생성자에서 예외를 throw하는 것이 좋지 않은 것으로 간주됩니다. 그 엄지 손가락 물건의 규칙 더 생각 ...

+0

나는 생성자를 던져서는 안된다는 것을 몰랐습니다. 우리는 그 정확한 생성자 (CS proff에서)를 사용한다고 가정합니다. – pood

+0

생성자 및 예외에는 몇 가지 문제가있을 수 있습니다. http://stackoverflow.com/a/1371559/355499, http://futuretask.blogspot.com/ 2006/05/java-tip-10-constructor-exceptions-are.html –

0

앞서 말했듯이, 당신은 inputfiles() 당신의 현재의 접근 방식으로 그것을 던져야합니다.

그러나 나는 단지 ColorSet에 대한 생성자를 사용하여 예외를 throw 한 다음 inputFiles()에서 예외를 catch하거나 inputFiles()가 호출자에게 예외를 전달하도록 제안합니다 (inputFiles에서 파일 검사 코드를 사용하지 않고) 방법). 이 방법은 중복 된 코드를 제거하고 다른 누군가가 여전히 ColorSet 객체를 만들 때 예외가 던져 지도록합니다.

관련 문제