Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在树节点数据中构造和实现聚合(或类似)方法的最佳模式_Java_Design Patterns_Generics_Tree - Fatal编程技术网

Java 在树节点数据中构造和实现聚合(或类似)方法的最佳模式

Java 在树节点数据中构造和实现聚合(或类似)方法的最佳模式,java,design-patterns,generics,tree,Java,Design Patterns,Generics,Tree,在树节点数据的层次结构上实现聚合(或类似)方法时,我遇到了一个问题。可以看出,这里泛型有点过度使用,这让我不满意,所以我的问题是: 有没有更好的方法来实现它(可能避免层次结构下聚合方法中对象的强制转换)? 当前情况(除去不相关的细节): 公共接口AggregableTreeData{ 空隙集料(T); } 公共抽象类果树数据> 果树{ 私有布尔成熟=假; @凌驾 公共空隙骨料(T自){ 成熟的;成熟的;成熟的;成熟的; } } 此外,我还有一个执行树数据聚合的方法,它如下所示: //child

在树节点数据的层次结构上实现聚合(或类似)方法时,我遇到了一个问题。可以看出,这里泛型有点过度使用,这让我不满意,所以我的问题是: 有没有更好的方法来实现它(可能避免层次结构下聚合方法中对象的强制转换)?

当前情况(除去不相关的细节):

公共接口AggregableTreeData{
空隙集料(T);
}
公共抽象类果树数据>
果树{
私有布尔成熟=假;
@凌驾
公共空隙骨料(T自){
成熟的;成熟的;成熟的;成熟的;
}
}
此外,我还有一个执行树数据聚合的方法,它如下所示:

//child.getData() and node.getData() is of type <T extends AggregableTreeData<T>>
void aggregateNode(TreeNode node) {
  for (TreeNode child : node.getChildren()) {
    aggregateNode(child);
    node.getData().aggregate(child.getData());
  }
}
//child.getData()和node.getData()属于
无效聚合节点(树节点){
for(TreeNode子节点:node.getChildren()){
集合节点(儿童);
node.getData().aggregate(child.getData());
}
}

看起来很像复合模式的作业

“这让我不满意”,为什么?这将很难避免泛型,因为它只适用于不变参数类型。也许你看的不满意-因为这里唯一的原因是泛型(和丑陋的构造,比如“水果树数据”)
//child.getData() and node.getData() is of type <T extends AggregableTreeData<T>>
void aggregateNode(TreeNode node) {
  for (TreeNode child : node.getChildren()) {
    aggregateNode(child);
    node.getData().aggregate(child.getData());
  }
}