impala中有趣的java泛型

public  class TreeNode<NodeType extends TreeeNode<NodeType>>{
    protected ArrayList<nodeType> children_;
}

看了这个<NodeType extends TreeNode<NodeType>>是不是感觉很绕。NodeType必须是TreeNode的子类,那么TreeNode后面那个NodeType又怎么理解。

 protected ArrayList<nodeType> children_;这个倒是挺好理解的,protected 一看就知道这个属性是给子类用的,老外的代码逻辑就是好。

那么看下其中一个之类:

abstract public class PlanNode extends TreeNode<
PlanNode>{}

这里可以看到子类中继承的children_的元素类型就是PlanNode..     如果不用继承怎么搞PlanNode<PlanNode>。这样是不是感觉别扭。



看开源代码发现老外的代码写的确实很好:美利坚,人类的希望







你可能感兴趣的:(impala中有趣的java泛型)