提问人:nikhrom 提问时间:12/15/2021 更新时间:12/15/2021 访问量:71
向下铸造 polimorphic 对象
down casting polimorphic objects
问:
有一个数据块,包含不同类型结构的连续打包数据。有必要将此数据读入数组中。 它的编程方式如下:
class Handler{
//...
public List<MyStruct> getMyStructs(){
// when processing, some subsequent data depends on the
// processing of the previous ones
}
//...
}
abstract class MyStruct{
// Common method implementations for all structs
}
class ImpulsOne extends MyStruct{
// declaring and init fields
// methods
}
class ImpulsTwo extends MyStruct{
// declaring and init fields
// methods
}
//and etc...
收到列表后,我们使用 MyStruct 中的常用方法生活和享受生活,但只要没有从某些类型的多个结构中提取和显示或处理多个字段的任务,就会发生这种情况。可以有很多这样的处理,不幸的是,每个处理都取决于前一个处理的结果。
我唯一想到的就是对每次处理进行一次下沉:
//...
SomeResult processing1(List<MyStruct> structs){
//...
for(var struct: structs){
if(struct instanceof ImpulsOne){
ImpulsOne impuls = (ImpulsOne) struct
// extracting fields and processing
}else if(struct instanceof ImpulsTwo){
ImpulsTwo = (ImpulsTwo) struct
// extracting fields and processing
}
// and many many else-if
}
}
//...
我不喜欢这种方法,我相信它可以变得更容易。
我希望我已经清楚地解释了问题的全部本质。你遇到过类似的问题吗?你有什么想法来简化代码?
谢谢。
答: 暂无答案
评论
abstract
MyStruct
executeAction
structs.forEach(MyStruct::executeAction);