2016-06-01 2 views
4

Object 타입을 반환하는 세션 객체의 값을 읽고 싶습니다. 개체에 true/false 값이 있다는 것을 알고 있습니다. 해당 값을 boolean 유형으로 변환하고 싶습니다. 그래서 나는 다음과 같은 코드를 가지고있다.Java에서 .toString()과 (String) cast의 차이점

session.getAttribute("MyKeyValue"); // It returns Object type 

아래 예외가 발생합니다. 다음은

boolean myBoolVal = Boolean.parseBoolean((String) session.getAttribute("MyKeyValue")); 

가 제대로 작동합니다.

boolean myBoolVal = Boolean.parseBoolean(session.getAttribute("MyKeyValue").toString()); 

실제로 옵션 1이 작동하지 않는 이유는 무엇입니까?

+0

여기이도 interst 될 수 있습니다 http://stackoverflow.com/ questions/328661/explicit-vs-implic-to-tostring – GhostCat

+0

session.getAttribute ("MyKeyValue")의 값은 무엇입니까? getClass()? – yelliver

답변

8

session.getAttribute("MyKeyValue")에 의해 반환 된 인스턴스의 런타임 유형이 String이 아닌 경우 String으로 캐스팅하면 ClassCastException이 반환됩니다.

반면에 session.getAttribute("MyKeyValue").toString()은 모든 객체가 toString() 메소드 구현을 가지고 있으므로 항상 작동합니다 (session.getAttribute("MyKeyValue")이 null이 아님).

이 BTW, session.getAttribute("MyKeyValue") 때문에 반환 가능성이 높습니다하는 String 반환하지 않는 Boolean (당신이 Boolean.parseBoolean() 작동 할 것으로 예상하기 때문에), 그래서 대신 BooleanString 다음에 변환의 케이스의 경우, 그냥 Boolean에 캐스팅 할 수 있습니다

Boolean myBoolVal = (Boolean) session.getAttribute("MyKeyValue"); 
0

당신은 그것을 세션 개체의 키를 원하는 모든 객체와 연관을 설정할 수 있습니다. 모든 객체는 모든 클래스의 객체를 의미합니다. 모든 클래스는 Object의 간접 하위 클래스 일 수 있으므로 setgetObject을 입력하십시오.

get을 통해 개체를 검색하면 단순히 Object으로 입력되지만 확실히 일부 하위 클래스입니다. (아래) String으로 캐스팅하지 못할 수 있습니다. 원래 클래스가 String이 아닌 경우 캐스팅/변환을 실현할 수 없다는 예외가 발생합니다. 귀하의 옵션 1.

옵션 2 일 모든 Object 인스턴스 (그것의 화면 프리젠 테이션 주로 유용) 객체의 String 표현을 얻기 위해 호출 할 수있는 방법 toString()이 있기 때문에의 경우 것으로 보인다. 그런 다음 parse 그 표현 (아마 "true" 또는 "false") 또는 falseboolean 얻으려면.

개체 아마 Boolean 인스턴스로 당신이 일에 당신의 옵션 1을 원하는 그렇다면, 당신은 사용할 수 있습니다

boolean myBoolVal = (Boolean)session.getAttribute("MyKeyValue"); 
+0

'static' 메소드'Boolean.parseBoolean (String)'은'Boolean'이 아닌'boolean'을 반환합니다. http://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html#parseBoolean-java.lang.String- 여기에는 언 박싱이 없습니다. –

+0

수정되었습니다. 감사합니다. –

+0

또한 값이 null 인 경우 unboxing은 NullPointerException을 발생시킵니다 (물론 OP의'toString'-version처럼). – Hulk

관련 문제