サンプルコード
C#で示したが、Javaも同じ
メリット:キャスト処理がなくなる
★改善前
class Image
{
public string Path { get; set; }
public static Image FromFile(string path)
{
return new Image() { Path = path };
}
}
class Bitmap : Image
{
...
}
// 利用側
var bm = Bitmap.FromFile("D:\\sample.jpg") as Bitmap;
★改善前
// 木
class TreeNode
{
public TreeNode LeftChild { get; set; }
public TreeNode RightChild { get; set; }
public TreeNode Parent { get; set; }
public int Value { get; set; }
}
// 赤黒木
class RBTreeNode : TreeNode
{
public bool IsRed { get; set; }
...
}
// AVL木
class AvlTreeNode : TreeNode
{
public int Balance { get; set; }
...
}
★改善後
class Image<T> where T : Image<T>, new()
{
public string Path { get; set; }
public static T FromFile(string path)
{
return new T() { Path = path };
}
}
class Bitmap : Image<Bitmap>
{
...
}
// 利用側
var bm = Bitmap.FromFile("D:\\sample.jpg");
★改善後
// 木
class TreeNode<T, K> where T : TreeNode<T, K> where K : IComparable<K>
{
public T LeftChild { get; set; }
public T RightChild { get; set; }
public T Parent { get; set; }
public K Value { get; set; }
}
// 赤黒木
class RBTreeNode : TreeNode<RBTreeNode, int>
{
public bool IsRed { get; set; }
...
}
// AVL木
class AvlTreeNode : TreeNode<AvlTreeNode, int>
{
public int Balance { get; set; }
...
}