refactor generics

型パラメータに指定していた 派生型指定を type Rによって回避する変更。
型引数が減ることにより可読性が向上することがメリット。
代わりに、実装クラスでtype Rの具体型を指定することが必須になる。