2012-02-21 3 views
0

Im 'Exception에서 파생 된 클래스 BrokenObjectException 클래스를 작성하려고합니다.예외에서 상속받을 수 없습니다.

직렬화 클래스 BrokenObjectException는이 필드를 선언하라고 요구하는 이유가 이해하지 않은

public class BrokenObjectException extends Exception 
{ 
    BrokenObject(String message) 
    { 
     ; 
    } 
} 

긴 형태의 정적 최종 serialVersionUID의 필드를 선언하지 않습니다 는하지만 이클립스에서 나는이 오류가 발생합니다. 일부 메소드를 선언하기 위해 강제로 인터페이스하면 안됩니까? 그래서 첫 번째 catch 블록에 내가 쓴

try 
{ 
    if(...) 
     throw new Exception("wrong"); 
    if(...) 
     throw new BrokenObjectException("wrong"); 
} 
catch(BrokenObjectException e) 
{ 
    // do something (action1) 
    throw e; 
} 
catch(Exception e) 
{ 
    // so something (action2) 
    throw e; 
} 

"수행 어쨌든 나는 그것을 내가 모든 예외를 잡는 방법과 다른 방법 NA를 잡으려면 때문에 예로부터 내가 블록을 가지고,이 클래스를 갖고 싶어 어떤 것". 이것은 던져진 예외 유형에 따라 다른 작업을 수행하기를 원하기 때문입니다. 그래서 BrokenObjectException은 Exception에서 파생되었으므로 두 번 catch됩니다. 그러나 BrokenObjectException이 throw되면 action1과 action2를 수행하고 싶습니다. 정상적인 Exception이 throw되면 그냥 액션 2를하고 싶습니다. 가능합니까? 오류를 해결하는 방법은 무엇입니까?

답변

2

이는 오류가 아니라 경고입니다. 단순히 클래스 선언 위의 @SuppressWarnings("serial") 주석을 사용 : 무슨 일이 일어나고 것은 당신이 Serializable 인터페이스를 구현하고 완전히의 계약을 준수하지 않을 경우, 그래서 컴파일러가 경고하는 클래스를 확장하는 것입니다

@SuppressWarnings("serial") 
public class BrokenObjectException extends Exception 
{ 
    BrokenObject(String message) 
    { 
     ; 
    } 
} 

. 이 문제를 해결하려면 (이 클래스의 객체를 직렬화하려는 것은 의심 스럽기 때문에) 위의 주석을 사용하기 만하면됩니다.

2

나는 eclipse가 제공하는 오류 텍스트를 강조 표시 한 다음 직렬 버전 UUID를 생성하도록 알려줄 것이라고 믿는다. 그 후, 그것은 당신이 그것을 원하는 방식으로 작동해야합니다. 당신은 그냥 무시하려는 경우

또한 당신은

@SuppressWarnings("serial") 

를 사용할 수 있습니다. 그러나 나는 앞으로 나아가고 그것을 생성하는 것이 좋습니다. 왜이 스택 오버 플로우 포스트를 체크 아웃하는지에 대한 더 많은 정보를 원한다. What is a serialVersionUID and why should I use it?

1

왜 serialVersionUID 필드가 필요한지 알고 계십니까? 그게 당신이 요구하는 것입니까? 그렇다면 다음을보십시오. link

관련 문제