0

我正在从事一个项目,该项目涉及我使用 JAXB 创建音乐 XML 文件。这是我的“Note”类的代码片段,它代表吉他音符。

@XmlType(propOrder={"pitch", "duration", "type", "notations"})
@XmlSeeAlso({ChordNote.class, DrumNote.class})
public class Note {
    private int duration;
    private String type;
    private Pitch pitch;
    private Notations nots;
    private int voice;
    
    public Note() {}  
    
    public Note(int duration, String type, Pitch pitch) {
        this.duration = duration;  
        this.type = type; 
        this.pitch = pitch;
    }
    
    public Note(int duration, String type, Pitch pitch, Notations nots, int voice) {
        this.duration = duration;  
        this.type = type; 
        this.pitch = pitch;
        this.nots = nots;
    }
    
    @XmlElement
    public int getDuration() {  
        return duration;  
    }  
    public void setDuration(int duration) {  
        this.duration = duration;  
    }
    
    @XmlElement
    public String getType() {  
        return type;  
    }  
    public void setType(String type) {  
        this.type = type;  
    }
    
    @XmlElement
    public Pitch getPitch() {  
        return pitch;  
    }  
    public void setPitch(Pitch pitch) {  
        this.pitch = pitch;  
    }
    
    @XmlElement
    public Notations getNotations() {  
        return nots;  
    }  
    public void setNotations(Notations nots) {  
        this.nots = nots;  
    }
    @XmlElement
    public int getVoice() {  
        return voice;  
    }  
    public void setVoice(int voice) {  
        this.voice = voice;  
    }

我们可以看到 note 类有多个构造函数,具体取决于我们要创建的便笺类型。这是 Note 对象的 XML 输出。

            <note>
                <pitch>
                    <step>E</step>
                    <octave>2</octave>
                </pitch>
                <duration>2</duration>
                <type>eighth</type>
                <notations>
                    <technical>
                        <string>6</string>
                        <fret>0</fret>
                    </technical>
                </notations>
            </note>

现在这是我的问题.. 每次我基于任一构造函数创建 Note 对象时,我注释为 @XmlElement 或 @XmlAttribute 的每个字段无论如何都会出现在 XML 中。在某些情况下,注释不应该有符号,但应该有其他所有内容,在其他情况下,它应该有符号但没有声音,从我的尝试来看,我无法控制它。我找到的唯一解决方案是创建多个从 note 继承的 Note 类,并根据我的需要创建正确类的实例。这会很快变得非常混乱,因为在很多情况下某些元素不应该出现在 XML 中,而有些应该出现。

如果 Xml 元素没有在构造函数中实例化,有什么方法可以隐藏它?例如,如果我将构造函数称为 public Note(int duration, String type, Pitch pitch),则符号和语音将不会出现在 XML 文件中。@XmlTransient 只是完全隐藏它,但我希望它只有在对象的构造函数中被提及时才会出现。

感谢您的帮助,厄尔布尔士

4

0 回答 0