短い答え
できません(JDKクラスのみを使用)
長い答え
試してみる:
public interface Constant {
int value();
}
public static Class<? extends Constant> classBuilder(final int value) {
return new Constant() {
@Override
public int value() {
return value;
}
@Override
public String toString() {
return String.valueOf(value);
}
}.getClass();
}
2つの新しいクラス「パラメトリック」クラスを作成しましょう。
Class<? extends Constant> oneClass = createConstantClass(1);
Class<? extends Constant> twoClass = createConstantClass(2);
ただし、このクラスをインスタンス化することはできません。
Constant one = oneClass.newInstance(); // <--- throws InstantiationException
Constant two = twoClass.newInstance(); // <--- ditto
匿名クラスごとにインスタンスが1つしかないため、実行時に失敗します。
ただし、 ASMなどのバイトコード操作ライブラリを使用して、実行時に動的クラスを構築できます。別のアプローチは動的プロキシを使用することですが、このアプローチは、インターフェイスメソッドしかプロキシできないという欠点があります(したがって、Javaインターフェイスが必要です)。