サンプルコード

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; }

...

}