java – 如何在不创建另一个类的情况下创建内部子项?
发布时间:2020-12-15 08:37:43 所属栏目:Java 来源:网络整理
导读:我需要生成这样的 XML: Root Children InnerChildrenSomethingM/InnerChildren /Children/Root 最简单的解决方案是在Root类上创建一个内部类: @Rootclass Root{ @Element Children element; @Root private static class Children{ @Element String innerCh
我需要生成这样的
XML:
<Root> <Children> <InnerChildren>SomethingM</InnerChildren> </Children> </Root> 最简单的解决方案是在Root类上创建一个内部类: @Root class Root{ @Element Children element; @Root private static class Children{ @Element String innerChildren; } } 但我想避免内部类创建,因为它会在使用Root对象时使事情看起来很奇怪.无论如何,我可以在不使用内部类的情况下实现该结果吗? 创建Root对象的预期方法: Root root = new Root("Something"); 我想避免的: Children child = new Children("Something"); Root root = new Root(child); // this could be achieve by injecting some annotations // in the constructor,but it's awful 解决方法
只需使用普通类而不是内部类.它应该仍然有效:
@org.simpleframework.xml.Root public class Root{ @Element Children children; public Root(){ children = new Children("Something"); } } @org.simpleframework.xml.Root public class Children{ @Element String innerChildren; public Children(String inner){ innerChildren = inner; } } 更新: @org.simpleframework.xml.Root class Root { @Element @Path("children") private final String innerChildren; public Root(String name){ innerChildren = name; } } 生产: <root> <children> <innerChildren>Something</innerChildren> </children> </root> 使用 @org.simpleframework.xml.Root @Namespace(reference="http://domain/parent",prefix="bla") class Root { @Element @Path("bla:children") @Namespace(reference="http://domain/parent",prefix="bla") private final String innerChildren; public Root(String name){ innerChildren = name; } } 生产: <bla:root xmlns:bla="http://domain/parent"> <bla:children> <bla:innerChildren>Something</bla:innerChildren> </bla:children> </bla:root> 如果使用样式来格式化XML,则需要进行一些修改,因为它们从元素中删除了:使用样式的结果是: <bla:root xmlns:bla="http://domain/parent"> <blachildren> <bla:innerChildren>Something</bla:innerChildren> </blachildren> </bla:root> 这就是我做的: public class MyStyle extends CamelCaseStyle{ @Override public String getElement(String name) { if( name == null ){ return null; } int index = name.indexOf(':'); if( index != -1 ){ String theRest = super.getElement(name.substring(index+1)); return name.substring(0,index+1)+theRest; } return super.getElement(name); } } 现在结果是预期的结果: <bla:Root xmlns:bla="http://domain/parent"> <bla:Children> <bla:InnerChildren>Something</bla:InnerChildren> </bla:Children> </bla:Root> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |