Используйте Reflection без проблем с производительностью

1

Я использую java 1.5. Я должен создать общую функцию, которая принимает 2 объекта (исходный класс и целевой класс), которые вызывают все геттеры и получают все значения из исходного объекта и вызывают сеттеры целевого объекта. Мое намерение состоит в том, чтобы получить все значения из исходного объекта и установить эти значения для целевого объекта. Оба класса объектов разбора отличаются друг от друга, но все инкапсуляции одинаковы (переменные, геттеры и методы настройки похожи).

Здесь я использую отражение, а затем вызываю геттеры и сеттер. Как я знаю, использование рефлексии вызывает проблемы с производительностью и памятью. Есть ли способ подойти к этому только с помощью java без каких-либо других сторонних банках? Любая реализация, методология для этого? Любой источник, коды примеров высоко оценены.

  • 1
    Примечание: если вы хотите использовать только методы получения / установки, используйте Introspection . Он использует отражение, чтобы выставить свойства и методы чтения / записи.
  • 0
    @ArnaudDenoyelle. Я благодарю вас за ваш быстрый ответ. Пожалуйста, дайте мне знать, что из-за интроспекции возникнут проблемы с производительностью или памятью?
Показать ещё 6 комментариев
Теги:
reflection

1 ответ

1

Я действительно поступил бы с инструментами (или другими инструментами создания кода). Как это делает инструментарий, это генерировать байт-код, который ведет себя так же, как и производительность рукописного кода. Однако вы должны знать, что усилия намного выше, чем при использовании рефлексии. Вы не можете его увидеть, вы не можете его отладить. Вот почему генерация исходного кода является реальной альтернативой, но это тоже байты! Вам нужна поддержка процесса сборки. Некоторая поддержка со стороны IDE была бы неплохой.

Независимо от вашего решения, подумайте очень тщательно, не исключено ли исключение копирования данных. Я имею в виду, насколько ценными могут быть две структуры данных, которые аналогичны, что автоматическое копирование возможно вообще? Действительно ли стоит потратить на это 3 или 4 месяца?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню