2010-02-02 5 views
1

긴 클래스 이름에 대한 별칭을 만드는 중입니다 ... 완벽하게 작동하지만 직렬화 된 클래스 중 하나는 개인 내부 클래스입니다. 나는 그것을 공개하는 것 외의 별칭을 만드는 방법을 생각할 수 없다. 나는이 솔루션을 좋아하지 않는다. 왜냐하면 그것은 처음부터 공개되어서는 안되기 때문이다. 그러나 별칭을 만들면 XML 파일을 수정하지 않고 패키지 및 클래스 이름을 변경할 수 있습니다 (첫 번째 태그는 정규화 된 클래스 이름이기 때문에).(XStream을 사용하여) 개인 내부 클래스에 대한 별칭을 만드는 방법은 무엇입니까?

이것은 내가 별칭을 만드는 방법은 다음과 같습니다

나는 그 내부 클래스에 대한 공용 액세스를 필요 이유
xstreamInstance.alias("ClassAlias", OuterClass.InnerClassToAlias.class); 

.

개인 내부 클래스에 별칭을 지정하는 트릭을 알고있는 사람은 누구나 알고 싶습니다.

+0

XStream에는 Pure Java와 Enhanced의 두 가지 모드가 있다는 것을 알게되었습니다. 확장 모드에서는 XStream 솔기가 훨씬 더 개인/내부/정적/기타에 연결할 수 있습니다. 순수 Java 모드보다 하지만 제 경우에는 제 코드를 실행하는 모든 JVM이 XStream Enhanced 모드 (JVM에 따라 다름)에 의해 지원 될 것이라고 가정 할 수 없습니다. – Joanis

답변

1

다음과 같은 클래스를 만들고 xstreamInstance에 대한 참조를 alias 메서드로 전달할 수 있습니다.

public class Parent { 
    public void alias(XStream x) { 
     x.alias("Kiddie", Parent.Child.class); 
    } 

    private class Child { 

    } 
} 
+0

좋은 생각 같습니다. 고맙습니다. 그래서 클래스를 공개하거나 작은 메소드를 추가 할 수있는 선택권이 있습니다. 작은 메소드는 불가능할 수있는 것을 허용하지 않기 때문에 매우 흥미 롭습니다 (다른 곳에서 내부 클래스를 인스턴스화하는 것과 같습니다). – Joanis

+0

개인 클래스가 사용자의 통제하에있는 경우 작동합니다. java.util.Arrays $ ArrayList와 같이 개인의 통제하에 있지 않은 개인 클래스에 대한 별칭을 어떻게 정의 할 수 있습니까? 어떤 아이디어? –

+0

내 자신의 질문에 대답하려면 : 해당 클래스의 인스턴스를 가져오고 인스턴스에서 getClass()를 사용하십시오. 이 아이디어는 [이 게시물] (http://comments.gmane.org/gmane.comp.java.xstream.user/5930)에서 제공됩니다. –

0

별칭에 대해 어노테이션을 사용하는 것은 어떻습니까?

public class Parent { 
    @XStreamAlias("kiddie") 
    private class Child { 

    } 
} 

편집 : 구문 분석 부모 클래스를 얻기 위해 요청할 때 아아, 중첩 된 클래스의 주석의 구문 분석 XStream을 지원하지 않습니다.

+0

나를 위해 작동하지 않습니다. 위의 예제와의 차이점은 내 내부 클래스가 정적 (중첩 클래스)이라는 점입니다. – Joanis

+0

XStream 코드를 살펴본 결과 내포 된 클래스를 암시 적으로 구문 분석하지 않습니다. –

+0

내부 클래스의 주석은 자동 감지 모드에서 올바르게 구문 분석되지만 여러 가지 의미가 있습니다. http://xstream.codehaus.org/annotations-tutorial.html#AutoDetect를 참조하십시오. –

관련 문제