Создать расширенный класс через ReflectionJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Создать расширенный класс через Reflection

Сообщение Anonymous »

У меня такой красивый и понятный интерфейс:

Код: Выделить всё

public interface Mapping {
O calculate(I input);

Class getInputClass();

Class getOutputClass();
}
Давайте для простоты предположим, что вход и выход — пустые интерфейсы.
Я хочу определить сопоставления во время выполнения и создать их экземпляры посредством отражения. Одним из примеров такого сопоставления является следующее:

Код: Выделить всё

public class DoublerMapping implements Mapping {
@Override
DoublerOutput calculate(DoublerInput input){
DoublerOutput output = new DoublerOutput();
output.setValue(input.getValue() * 2);
return output;
}

@Override
Class getInputClass(){
return DoublerInput.class;
}

@Override
Class getOutputClass(){
return DoublerInput.class;
}
}
Однако при создании экземпляров сопоставлений путем отражения я могу использовать только getInputClass() и getOutputClass() для создания экземпляров входных данных и Выходы соответственно (с использованием Mapping.getInputClass().getDeclardConstructor().newInstance()) вместо их фактического расширения. Я не хочу, чтобы Mapping принимал общий вход, поскольку я хочу убедиться, что он получает правильный класс, которого он ожидает. Я также не могу перенести в интерфейс методы getValue() и setValue(), поскольку они могут принимать любые аргументы и иметь разные сигнатуры.
Как нужно ли мне создавать входные данные I Extension во время выполнения и передавать их обратно в параметризованный класс Mapping? Даже Mapping.execute(mapping.getInputClass().getDeclaredConstructor().newInstance()) не компилируется.
Или есть лучший способ добиться этого?

Подробнее здесь: https://stackoverflow.com/questions/790 ... reflection
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»