e.getMessage()와 e.getLocalizedMessage()의 차이점
Java 예외에 대한 및 메서드의 차이점은 무엇입니까?
이 두 가지 방법을 모두 사용하여 오류 처리 중에 catch block에 의해 전달된 메시지를 받습니다.둘 다 오류 처리에서 메시지를 얻습니다만, 이 둘은 정확히 어떻게 다른가요?
인터넷에서 검색했더니 Answers.com에서 다음과 같은 답을 찾았습니다.
Java 예외는 throwable에서 getMessage 메서드와 getLocalizedMessage 메서드를 상속합니다(관련 링크 참조).차이점은 로케일 고유의 메시지를 제공하기 위해 서브클래스가 getLocalizedMessage보다 우선해야 한다는 것입니다.
예를 들어, 미국 영어회화 회사/그룹에서 영국 영어 그룹으로 코드를 수정하는 이미지입니다.getLocalizedMessage를 덮어쓰는 커스텀 예외 클래스를 생성하여 코드를 사용하는 사용자와 개발자가 기대하는 맞춤법과 문법을 수정할 수 있습니다.이는 예외 메시지의 실제 번역에도 사용할 수 있습니다.
질문:
언어 고유의 구현을 의미합니까?예를 들어서
e.getLocalizedMessage()
예를 들어 영어로 된 앱 - 에러가 입력됩니다.English
스페인어로 앱을 사용하면 오류가 스페인어로 표시됩니까?이러한 방법을 언제 어디서 사용할 수 있는지에 대한 명확한 설명이 필요합니다.
위에서 언급한 바와 같이,
제가 알기로는getMessage()
예외의 이름을 반환합니다. getLocalizedMessage()
는 사용자의 로컬 언어(중국어, 일본어 등)로 된 예외 이름을 반환합니다.과 .getLocalizedMessage()
이 on을 것이 틀림없습니다.getLocalizedMessage()
슈퍼 으로는 getMessage 결과가 됩니다.그렇지 않으면 슈퍼 클래스 중 하나의 메서드를 호출합니다.get Message를 사용합니다.
그 외에 사용법을 설명하는 코드 세그먼트를 몇 개 넣고 싶습니다.
사용방법
자바는 마법 같은 일을 하지 않지만, 우리의 삶을 더 편하게 해줄 수 있는 방법을 제공한다.「」를 getLocalizedMessage()
사실상 기본 동작을 무시해야 합니다.
import java.util.ResourceBundle;
public class MyLocalizedThrowable extends Throwable {
ResourceBundle labels = ResourceBundle.getBundle("loc.exc.test.message");
private static final long serialVersionUID = 1L;
public MyLocalizedThrowable(String messageKey) {
super(messageKey);
}
public String getLocalizedMessage() {
return labels.getString(getMessage());
}
}
java.util.ResourceBundle
는 현지화에 사용됩니다.
예에서는 언어 을 에 .loc/exc/test
예를 들어 다음과 같습니다.
message_fr.properties(일부 키와 값 포함):
key1=this is key one in France
message.properties(일부 키와 값을 포함):
key1=this is key one in English
이제 예외 생성기 클래스가 다음과 같다고 가정해 보겠습니다.
public class ExceptionGenerator {
public void generateException() throws MyLocalizedThrowable {
throw new MyLocalizedThrowable("key1");
}
}
주요 클래스는 다음과 같습니다.
public static void main(String[] args) {
//Locale.setDefault(Locale.FRANCE);
ExceptionGenerator eg = new ExceptionGenerator();
try {
eg.generateException();
} catch (MyLocalizedThrowable e) {
System.out.println(e.getLocalizedMessage());
}
}
기본적으로는 "영어" 환경에서 실행하는 경우 "영어" 키 값이 반환됩니다.로컬을 프랑스로 설정하면 message_fr 파일에서 출력을 얻을 수 있습니다.
사용 시기
어플리케이션이 l10n/i18n을 지원해야 하는 경우 이를 사용해야 합니다.그러나 대부분의 오류 메시지는 최종 고객을 위한 것이 아니라 지원 엔지니어/개발 엔지니어를 위한 것이므로 대부분의 애플리케이션은 그럴 필요가 없습니다.
정말 놀랍다 - 열림 확인Throwable.java 클래스의 JDK 7 코드.
★★★의 getLocalizedMessage
아 -
390 public String getLocalizedMessage() {
391 return getMessage();
392 }
그리고 의 주입.getMessage
-filename -는 -filename-입니다.
376 public String getMessage() {
377 return detailMessage;
378 }
그리고.
130 private String detailMessage;
두 방법 모두 문서화 외에는 변경 사항이 없습니다.
아닙니다. 언어 고유의 구현을 의미하는 것은 결코 아닙니다.이는 국제화(i18n) 메커니즘을 사용하는 구현을 의미합니다.리소스 번들의 정의와 사용 방법에 대한 자세한 내용은 이 페이지를 참조하십시오.
GIST는 많은 수의 텍스트를 리소스 파일에 배치하고(로케일/언어별로 1개씩), 코드는 올바른 리소스 파일 내의 텍스트를 검색하는 메커니즘을 사용합니다(제공한 링크는 상세하게 됩니다.
언제 어디서 사용되느냐에 대해서는 전적으로 당신에게 달려 있습니다.일반적으로는 영어에 익숙하지 않은 비기술 사용자에게 예외를 제시하고 싶을 때에만 이 문제가 발생합니다.예를 들어 로그 기록에만 쓰는 경우(일반적으로 테크니컬 사용자만 읽고 일반적인 i18n 타깃은 아님)는 다음과 같습니다.
try {
somethingDangerous();
} catch (Exception e) {
log.error("got this: "+e.getMessage());
}
단, 예외 메시지를 화면에 표시하는 경우(예를 들어 작은 대화 상자)에는 메시지를 로컬 언어로 표시할 수 있습니다.
try {
somethingDangerous();
} catch (Exception e) {
JOptionPane.showMessageDialog(frame,
e.getLocalizedMessage(),
"Error", <---- also best be taken from i18n
JOptionPane.ERROR_MESSAGE);
}
public String getMessage()
이 슬로우 가능 상세 메시지 문자열을 반환합니다.
public String getLocalizedMessage()
이 슬로우 가능에 대한 현지화된 설명을 만듭니다.로케일 고유의 메시지를 생성하기 위해 서브클래스는 이 메서드를 덮어쓸 수 있습니다.메서드를 은 " " "와 같은 합니다.getMessage()
.
당신의 경우 e는 예외의 대상일 뿐입니다.
getLocalizedMessage()
사용자 자신의 메시지를 덮어쓰고 현지화된 메시지의 의미를 부여해야 합니다.
예를 들어... Null 포인터 예외가 있는 경우...
e를 인쇄하면 null로 표시됩니다.
e.getMessage() ---> NullPointerException
Throwable.java 클래스는 이렇게 말합니다.누군가에게 도움이 될 수도 있습니다.
/**
* Returns the detail message string of this throwable.
*
* @return the detail message string of this {@code Throwable} instance
* (which may be {@code null}).
*/
public String getMessage() {
return detailMessage;
}
/**
* Creates a localized description of this throwable.
* Subclasses may override this method in order to produce a
* locale-specific message. For subclasses that do not override this
* method, the default implementation returns the same result as
* {@code getMessage()}.
*
* @return The localized description of this throwable.
* @since JDK1.1
*/
public String getLocalizedMessage() {
return getMessage();
}
제가 알기론 get Message는 예외의 이름을 반환합니다.get Localized Message는 예외의 이름을 사용자의 로컬 언어(중국어, 일본어 등)로 반환합니다.이 작업을 수행하려면 getLocalizedMessage를 호출하는 클래스가 getLocalizedMessage 메서드를 덮어써야 합니다.그렇지 않으면 슈퍼 클래스 중 하나의 메서드를 호출합니다.이 메서드는 기본적으로 getMessage 결과를 반환합니다.
따라서 대부분의 경우 결과는 동일하지만 경우에 따라서는 프로그램이 실행되고 있는 지역의 언어로 예외 이름을 반환합니다.
예를 들어 영어로 e.getLocalizedMessage()를 사용하는 경우 오류는 영어로, 스페인어로 사용하는 경우 오류는 스페인어로 표시된다는 의미입니까?
public String
getMessage()
Returns the detail message string of this throwable.
public String
getLocalizedMessage()
이 슬로우 가능에 대한 현지화된 설명을 만듭니다.로케일 고유의 메시지를 생성하기 위해 서브클래스는 이 메서드를 덮어쓸 수 있습니다.이 메서드를 덮어쓰지 않는 서브클래스의 경우 기본 구현에서는 getMessage()와 같은 결과가 반환됩니다.
당신의 경우 e는 예외의 대상일 뿐입니다.
getLocalizedMessage() u need to override and give your own message i.e
the meaning for localized message.
예를 들어... Null 포인터 예외가 있는 경우...
e를 인쇄하면 null로 표시됩니다.
e.getMessage() ---> NullPointerException
제가 알기로는getMessage
예외의 이름을 반환합니다.
getLocalizedMessage
는 사용자의 로컬 언어(중국어, 일본어 등)로 된 예외 이름을 반환합니다.
이 작업을 수행하기 위해 호출하는 클래스는getLocalizedMessage
on이 오버라이드 되어 있는 것이 틀림없습니다.getLocalizedMessage
방법.
그렇지 않은 경우 슈퍼 클래스 중 하나의 메서드를 호출합니다.이 메서드는 기본적으로는 다음 결과를 반환합니다.getMessage
.
언급URL : https://stackoverflow.com/questions/24988491/difference-between-e-getmessage-and-e-getlocalizedmessage
'programing' 카테고리의 다른 글
Python 3에서 int를 바이트로 변환하는 중 (0) | 2022.09.06 |
---|---|
Windows에서 MySQL 화면 콘솔을 지우려면 어떻게 해야 합니까? (0) | 2022.09.05 |
'-rdynamic'은 정확히 어떤 역할을 하며 언제 필요할까요? (0) | 2022.09.05 |
MYSQL DATEFF에만 시간 표시 (0) | 2022.09.05 |
open Session()과 get Current Session()의 휴지 상태 (0) | 2022.09.05 |