2007年2月22日 星期四

Family polymorphism in Java

Family polymorphism是一種特殊的繼承架構,舉例

Graphy {Node [] nodes ; Edge [] edges; ...}

則稱Graphy含有Node與Edge的物件。
若我們創造一個WeightGraphy,其Edge要用WeightEdge extends Edge,則其constructor為

WeightGraphy(){nodes = new WeightNode[];edges = new WeightEdge[]; ...}

換句話說,WeightGraphy所用的Node與Edge會與其他類型的Graphy,例如UndirectionGraphy所用的Edge,Node皆不一樣,但是在Graphy的定義中無法顯現出這種差別,所以這就是Family polymorphism造成的問題。

那如何在Java 1.5支援Generic Type時解決這問題呢?
Graphy <N extends Node, E extends Edge >{N [] nodes; E [] edges;...}

這樣的話,WeightGraphy的定義可以寫成

WeightGraphy
< WeightNode, WieghtEdge >{ ... }

對於family polymorphism的問題就可以迎刃而解了!

沒有留言: