2.5 小结

单纯从编程语言的角度来说,静态类型语言和动态类型语言都有各自的优劣势。静态类型语言所提供的强大的编译时刻类型检查能力,可以尽可能早地发现程序中存在的类型错误。其严谨的语法对初学者来说更加容易理解。而动态类型语言所能提供的是更加灵活和简洁的语法。这通常意味着更少的代码量和更易理解的代码逻辑,同时也对开发人员提出了更高的要求。考虑到这些优劣势,开发人员可以根据应用开发的需要来灵活选择。编程语言不应该对开发人员的这种选择造成阻碍。开发人员也可以在一个应用的开发中使用多种不同的编程语言来开发不同的组件。

Java语言虽然是静态类型语言,但是它也提供了足够多的动态性来应对灵活性要求较高的场景。这些动态性体现在本章介绍的脚本语言支持API、反射API、动态代理和Java 7中通过JSR 292引入的动态语言支持上。基于Java平台的开发人员可以选择各种不同的方式来应对灵活性的要求。可以选择把灵活性和动态性完全交给脚本语言去解决,再通过脚本语言支持API集成到主Java程序中;也可以通过反射API在运行时刻动态地调用方法;当需要对接口中的方法调用进行拦截时,动态代理是一个很好的选择;JSR 292引入的方法句柄在灵活性上要远胜于反射API中的Method类。在方法句柄上的各种变换操作足以应付多种常见的需求。