我是一名经验丰富的 Java 开发人员,但我是 Groovy 程序员的新手,我目前正在学习(到目前为止还不错)。作为参考,我正在阅读本文档:
http://groovy.codehaus.org/Groovy+style+and+language+feature+guidelines+for+Java+developers
一切都很好,除了我不完全理解的一件事。文档说类是一等公民.class,Groovy 中不需要后缀。但如果是这种情况,我如何在 Groovy 中引用对象的类型(即类)?
考虑以下示例:
def o = new Object()
println("$o, ${o.class}")
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出:
java.lang.Object@da479dd, class java.lang.Object
Run Code Online (Sandbox Code Playgroud)
此输出是预期的并且是有道理的。但是当他们说.class不需要后缀时,Groovy 文档比指的是什么?
在 Groovy 和许多其他动态语言中,一切都是对象,包括类本身。
假设您在 Java 中有一个 Circle 类。你需要调用 Circle.getClass() 来处理一个类对象。在许多动态语言中,不需要指定类本身。说你有一堂课
class Miu {}
Run Code Online (Sandbox Code Playgroud)
以后每次对 Miu 的引用都将引用类对象本身
Miu.class
Miu
Run Code Online (Sandbox Code Playgroud)
都将评估为同一个对象
换句话说,Java 和更早的 C++ 没有 eval(),因此类定义本身不能直接成为类对象。其中的 OO 模型更像是面向类的编程,而不是真正的面向对象,因为类巧妙地不是对象。在最近的解释型动态语言中,类本身就是直接的对象。