Есть две концепции, которые нужно понять, прежде чем продолжать вызывать динамику.
1.Статическая и динамическая типизация
Статическая - проверка типов преформ во время компиляции (например, Java)
Динамическая - проверка типов преформ ввремя выполнения (например, JavaScript)
Проверка типа - это процесс проверки того, что программа безопасна по типу, то есть проверка типизированной информации для переменных класса и экземпляра, параметров метода, возвращаемых значений и других переменных.Например, Java знает о int, String, .. во время компиляции, в то время как тип объекта в JavaScript может быть определен только во время выполнения
2.Сильный или слабый тип
Сильный - указывает ограничения на типы значений, предоставляемых его операциям (например, Java)
Слабый - преобразует (преобразует) аргументы операции, если эти аргументы имеют несовместимые типы (например, Visual Basic)
Зная, что Java является статически и слабо типизированным, как реализовать языки с динамической и строгой типизацией в JVM?
invokedynamic реализует систему времени выполнения, которая может выбрать наиболее подходящую реализацию метода или функции - после компиляции программы.
Пример: Имея (a + b) и ничего не зная о переменных a, b во время компиляции, она вызывает динамическую привязку этой операции к наиболее подходящему методу в Java во время выполнения.Например, если выясняется, что a, b - строки, вызовите метод (String a, String b).Если оказывается, что a, b являются целыми числами, то вызовите метод (int a, int b).
invokedynamic был представлен в Java 7.