我们有Jython,J
Ruby,Groovy,它们是动态类型的并且可以通过JVM运行.我明白这些语言编译为字节码.
其他语言如Scala支持类型推断,并且清楚地说,编译器为我们推断了类型.
但Java是一种静态语言,它编译为字节码,这是否意味着字节码支持动态输入?
例如在Java中,我们需要在编译时声明变量类型,永远不会改变它.但是,在Python的情况下,我们不必声明一个类型,但是我们可以在运行时将任何类型的值分配给同一个变量.
动态打字如何在静态语言上工作?
解决方法
But Java is a static language and it compiles to bytecode,does this mean bytecode supports dynamic typing?
是的,这意味着.
你看到Java不是一种完全静态类型的语言.每当将对象从类型转换为子类型时,JVM将执行动态(运行时)类型检查,以检查对象是否是子类型的实例.使用instanceof是动态类型检查的另一个例子.
当您使用反射API时,也可以使用动态类型检查,即使使用泛型.
How does the dynamic typing work over a static language?
它是一种纯粹的静态类型检查语言,然后它不.例如,Pascal是一种强力类型的语言(纯粹地)静态打字.但大多数现代编程语言至少支持一些级别的运行时类型检查.许多动态类型语言有可选的静态类型,或使用类型引用来开发类型相关错误的开发人员工具.