2011-08-31 2 views
9

오류없이 컴파일하고 코드를 표준 연습으로 사용하려고합니다. 하지만 .NET에서는 처리 할 수 ​​있지만 Java에서는 처리 할 방법이 없다는 단점이 있습니다.Java에서 catch 변수 경고 경고

try { 
     FileInputStream in = new FileInputStream(filename); 
     return new Scanner(in).useDelimiter("\\A").next(); 
    } catch (FileNotFoundException ex) { 
     LOG.log(Level.SEVERE, "Unable to load file: {0}", filename); 
     return null; 
    } 

내가 변수 ex이 사용되지 않는다는 경고를 얻을 :이 같은 코드 블록을 말해봐. 자, ex을 실제로 사용하지 않고, ex을 원하지 않습니다. 그러나 그것에 대해 어떻게해야할지 모르겠습니다. .NET에서 나는 단지 다음을 할 수 있습니다.

catch (FileNotFoundException) 

변수가 없으므로 오류없이 컴파일되고 실행됩니다.

Java에서 이러한 상황을 어떻게 처리합니까? 로컬 변수를 만들어 ex으로 설정할 수는 있지만 실제로 필요하지 않은 경고를 수정하는 것은 어리석은 낭비적인 해결 방법처럼 보입니다.

+1

에 대한

어쨌든, 미안 해요, 그래서 그것을 무시이 예외를 이해하지 않습니다. Java는 유모 (nanny) 접근법을 사용하여 예외 처리 가치가 있음을 알려줍니다. –

답변

6

자바를 사용하는 경우를 제외하고는 "ex을 사용한 것으로 표시"하는 명확한 방법이 없습니다.

참고 그러나 its documentation에 따라 FileNotFoundException도 발생 될 수 있음을 때 "[...] 파일이 존재하지만 시도는 읽기 전용을 열하려고 할 때 어떤 이유로 예를 들어, 액세스 할 수 없습니다 파일을 작성하십시오. "

따라서 을 수행하십시오.도 예외에서 메시지를 인쇄하여 예외를 사용하십시오.

나는 이것이 일반적인 질문에 답하지 못한다는 것을 알고 있지만, 적어도 일부에 대한 정보를 기록하지 않을 것이라고 생각하지는 않습니다.

+0

첫 번째 문장에서 내 질문에 가장 직접적으로 답변했기 때문에 이것을 가장 좋은 답으로 표시했습니다. – Sheridan

+0

"사용자 인터페이스 항목으로 예외 텍스트 ('toString()')를 사용하여 예외 메시지를 출력합니다. 나는 그것이 나쁜 생각이라고 말하고 싶다. 텍스트는 국제화되지 않았으며 종종 사용자가 아닌 프로그래머를위한 형태였다. – Raedwald

+0

예외에서 메시지를 사용해야하는지에 대한 더 많은 생각 : http://stackoverflow.com/questions/7320080/should-you-report-the-message-text-of-exceptions – Raedwald

11

로그인 예외입니다. 어쨌든 버그를 쫓을 때 항상 유용합니다.

+1

동의합니다 : 파일을 찾을 수없는 이유를 아는 것이 항상 유용 할 수 있습니다. 최고 또는 최고 수준의 예외를 기록 할 수 있습니다. – Matteo

+3

강력하게 동의하고,'LOG.log (Level.SEVERE, "파일을로드 할 수 없습니다 :"+ filename, ex);'. –

+0

그는 예외를 기록합니다. 그의 문제는 컴파일러의 가짜 경고 메시지입니다. – Raedwald

1

javac를 사용하여 해당 코드를 컴파일하면 경고가 표시되지 않으므로 다른 컴파일러 또는 다른 설정을 사용하고 있습니다. 사용하지 않는 변수에 대한 특수 설정과 함께 IDE가 사용된다고 가정합니다.

이클립스에서는 주석을 사용하여 이러한 경고를 줄 바꿈합니다.이 경우 앞에 줄 번호는 @SuppressWarnings ("unused")입니다.

+0

그는 오류가 발생하지 않고 경고 메시지를 표시합니다. – Paul

+0

맞습니다. 명령 줄에서 경고를받지 못하기 때문에 문제를 해결했습니다. .NET에서 나는 단지 할 수있다 : ... catch (FileNotFoundException) ... 변수가 없으면 컴파일되고 오류없이 실행된다. "하지만 다른 곳에서는 분명히 경고. –

0

예외를 기록해야합니다. FileInputStream API에 따르면 FileNotFoundException은 "파일이 존재하지 않거나 일반 파일이 아닌 디렉토리이거나 다른 이유로 열어서 읽을 수없는 경우"throw 될 수 있습니다. 이 문제가 발생하면 로그 파일에 더 자세한 정보 (예 : 스택 추적)가 있으면 쉽게 수정할 수 있습니다.

2

경고는 IDE 경고이므로 해제 할 수 있어야합니다.

그러나 FileNotFoundException을 throw 할 수있는 이유는 많이 있습니다.이 경우 이유를 알고 싶을 것입니다.

IntelliJ는 사용자의 설정에 따라 의도적으로 무시 된 예외 또는 비어 있지 않은 catch 블록을 허용하는 것으로 ignore 또는 ignored을 인식합니다.

3

기본적으로 SOL (변수를 선언하고 경고를 받아 들여야합니다.) JAVA는 개발자에게 접근하기에는 약간의 조울증이 있거나 우울함을 나타 내기 때문에; 이것은 또 다른 예입니다. JAVA는 catch 변수를 사용하지 않더라도 catch 변수를 선언하도록합니다. 즉, 사용하지 않은 변수가 문제를 일으키기 만하면됩니다. "이 예외 변수로 작업해야 함"에 대한 많은 의견이 있었지만,이 주석은 질문의 요점을 놓치고 있습니다. 문제는 "이 미사용 변수 경고를 얻지 못하는 이유"입니다. 예제에서는 FileNotFound 예외를 사용하지만 예외가 될 수 있습니다. 질문은 FileNotFound 예외에 관한 것이 아니라 사용되지 않은 변수 경고에 관한 것이 었습니다.

예외 유형은이 질문에 중요하지 않습니다. 예를 들어, 데이터 버퍼를 관리하는 클래스가 있습니다. 몇 가지 이유로 인해 예외가 발생할 수 있습니다. 그 중 하나는 데이터 버퍼가 가득 차는 것입니다. 따라서 전체 버퍼에 데이터를 저장하려고하면 해당 함수에서 해당 예외를 수신 할 수 있습니다. 이 상황에서받을 수있는 유일한 예외입니다. 이 클래스를 사용하는 함수 중 하나가 예외를 감지하고 버퍼를 확장합니다. 예외 변수를 신경 쓰지 않고 예외를 기록하지 않고 예외를 처리하고 계속 이동합니다. 예외 대신에 버퍼가 꽉 찼음을 나타내는 플래그를 반환 할 수 있지만 예외 처리 시스템을 패배시킵니다 (이 예외가 오류 인 시스템에 다른 루틴이 있으며 사용자에게 로깅 및 메시지를 처리하는 다른 루틴이 있습니다 등)

따라서 사용하지 않는 변수 경고를 무시하도록 IDE를 설정할 수 있습니다. 그러나 변수를 사용하지 않는 것이 실제 문제를 나타낼 때가 있기 때문에 좋은 생각이 아닙니다 (코드 조각이 없거나 블록 주석이나 다른 것을 끝내는 것을 잊었을 수도 있습니다). 또는 적어도 혼란을 가져올 수있는 사용되지 않는 코드 조각이 있습니다. 나는 그 경고를 억압 할 수는 있었지만, 그것은 단지 진흙 투성이 다. 최종선은 내가 사용하지 않는 변수를 넣어야하고, 사용되지 않는 이유를 문서화해야하며, JAVA가 나 자신을 보호하기를 원하기 때문에 경고를 표시하지 않기 위해 (그래서 QA가 불평하지 않는다) 모든 것을 해결해야한다.

<rant> 

여기에는 JAVA에 큰 문제가 있습니다. JAVA는 심각한 전문가가 심각한 프로젝트에 사용할 수있는 심각한 프로그래밍 언어라고 주장합니다. 그런 다음 그들은 똑같은 진지한 전문가들이 항상 어리석은 실수를 저지르고 그 실수로부터 보호받을 필요가 있다고 가정합니다. 그것은 마치 외과 의사에게 그들이 스스로자를 수 있기 때문에 메스를 사용할 수 없다는 말과 거의 같습니다. 아마추어를위한 장난감 프로그래밍 언어를 만들고 있다면 원하는 모든 보호 기능을 넣으십시오. 그러나 전문가를위한 언어를 만들려는 경우 전문가에게 직업을 수행하는 데 필요한 도구를 제공하십시오. 그들은 전문가이며 전문적인 도구를 제공합니다. 사용되지 않는 변수의 정의를 강요하고, 연산자 오버로드를 허용하지 않고, 서명되지 않은 프리미티브를 가지지 않고 기본적으로 사용자 클래스를 2 등급 시민으로 취급하는 것과 같은 것들은 도구 집합을 제한하고 전문 기술자가 모두 전문적이지 않다는 견해를 나타냅니다. 나는 경고를 신경 쓰지 않는다 - 그들은 개발 과정이 더 빨리 진행되도록 돕는다. 나는 완전한 도구 세트의 부족을 싫어한다. 그로 인해 해결해야 할 일들이 생기고, 실수가 생길 수 있습니다. 호언 장담 그것은 말을 여러 언어로 너무 쉽게

</rant>