короткий ответ
вы не можете (используя только классы 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();
}
давайте создадим двановые классы "параметрические" классы:
Class<? extends Constant> oneClass = createConstantClass(1);
Class<? extends Constant> twoClass = createConstantClass(2);
однако вы не можете создать эти классы:
Constant one = oneClass.newInstance(); // <--- throws InstantiationException
Constant two = twoClass.newInstance(); // <--- ditto
это не удастся во время выполнения, так как существует только один экземпляр для каждого анонимного класса.
Однако вы можете создавать динамические классы во время выполнения, используя библиотеки манипулирования байт-кодом, такие как ASM . Другой подход заключается в использовании динамических прокси , но этот подход является недостатком, заключающимся в том, что вы можете использовать только методы интерфейса с прокси (поэтому вам необходим интерфейс Java).