gpt4 book ai didi

java - 迭代来自同一基类的不同对象

转载 作者:行者123 更新时间:2023-12-01 23:13:54 25 4
gpt4 key购买 nike

我有各种类来定义一段音乐的结构元素。层次结构是 Song > Section > CompositeMusic > MusicTime ,所有这些都继承自抽象 MusicComponent类。

MusicTime是底层并且知道哪个 Chord演奏和演奏多少个四分音符,并包含在CompositeMusic中的条中。对象。 Section依次持有 CompositeMusics并允许节奏和拍号更改。

我需要能够递归地迭代所有 SectionsSong ,全部CompositeMusics在每个 Section ,并播放所有 MusicTimes在每个 CompositeMusic 。换句话说,迭代每种类型中的所有子级,除非它是 MusicTime在这种情况下播放它。

我天真地以为我可以写一个摘要List<MusicComponent> getChildren()关于MusicComponent基类,这样我就可以以相同的方式迭代任何后代。但是这是不允许的,因为它不接受 List<Section>例如。

所以我的问题是,递归迭代来自同一基类的不同对象的正确方法是什么?

编辑

代码示例,根据要求:

基类

public abstract class MusicComponent {

public MusicComponent() {

}

public abstract void play();
public abstract boolean addComponent(MusicComponent component);
public abstract List<MusicComponent> getChildren();

}

子类示例

public class Song extends MusicComponent {

String songName;
List<Section> sections;

public Song(String songName, List<Section> sections) {

this.songName = songName;
this.sections = sections;
}

这就是我想要在 Song 上执行的操作(以及 SectionCompositeMusic 的等效项)

@Override
public List<MusicComponent> getChildren() {
return sections;
}

但它会引发编译错误,因为它无法从 List<Section> 隐式转换至List<MusicComponent>即使SectionMusicComponent 的后代,这就是我希望能够做到的

最佳答案

尝试使用List<? extends MusicComponent>作为返回类型

关于java - 迭代来自同一基类的不同对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21516591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com