Насколько я знаю и понимаю,Статические языки и отражения
Отражение является возможность создавать/изменять исходный код во время выполнения.
Материал из Википедии:
- Discover и изменять исходный код конструкции (такие как блоки кода, классов, методов, протоколов и т.д.) в качестве объекта первого класса в выполнения.
- Преобразование строки, соответствующей символическому названию класса или функции , в ссылку или вызов этого класса или функции.
- Оцените строку, как если бы это была инструкция исходного кода во время выполнения.
Создайте новый интерпретатор для байт-кода языка, чтобы дать новое значение или цель для конструкции программирования.
Динамические языки являются языки, которые мы можем Eval (оценить непосредственно из строки) во время выполнения.
Из википедии: «расширение программы, путем добавления нового кода, путем расширения объектов и определения, или путем изменения системы типа»
Хорошо, теперь мой вопрос: Как статический язык ד (без способность eval) может иметь отражение (например, Java)? (новый исходный код не оценивается?: /)
Заранее благодарим!
Java имеет библиотеку обработки байтового кода, называемую [ASM] (http://asm.ow2.org/).Отражение не используется для добавления нового кода, как вы описываете в своем вопросе. –
Отражение позволяет взломать (да, это может быть вредно в некоторых случаях) с классом, запросив о его методах, полях, уровнях доступа и т. Д., Но вы не генерируете новый код_. Он имеет другие функции, такие как, например, вызов метода, определенного в определенном классе, основанного только на данных о нем (* метаданных *). Вы получаете экземпляр класса, вы получаете от него метод на основе его фирмы, а затем вы вызываете его. – Gamb
@ Gamb 10x, но если u изменить исходный код, значит, вы создаете исходный код (как говорит Википедия), не так ли? – gran33