概要 Javaではレシーバーが特定のParameterized Typeである時のみ呼び出す事が出来るインスタンスメソッドを定義するという言語機能はありません。しかし、Parameterized Typeを引数に取る関数を外部で定義し、ジェネリック型には外部から渡された関数を自身のインスタンスで評価するメソッドを定義する事により模倣することができます。 型制約 インスタンスメソッドを呼び出す事が出来る条件として型変数の継承関係を取る事を本記事では型制約と呼びます。 型制約のモチベーションを確認するために次のコードを考えましょう。 public final class Holder<T> { private final T t; public Holder(T t) { this.t = t; } public T t() { return t; } // ネストしたHolderを「潰す」