如何理解Groovy的课程作为一等公民

时间:2014-03-23 00:07:54

标签: groovy

我是一名经验丰富的Java开发人员,但我是一名新手Groovy程序员,我现在正在学习(到目前为止它很棒)。作为参考,我正在阅读这份文件:

http://groovy.codehaus.org/Groovy+style+and+language+feature+guidelines+for+Java+developers

这一切都很好,除了一件我不完全理解的事情。文档说,类是一等公民,Groovy中不需要.class后缀。但是如果是这样的话我怎么能在Groovy中引用一个对象的类型(即类)呢?

考虑以下示例:

def o = new Object()
println("$o, ${o.class}")

这给了我以下输出:

java.lang.Object@da479dd, class java.lang.Object

此输出是预期的并且有意义。但是当他们说不需要.class后缀时,什么是Groovy文档?

2 个答案:

答案 0 :(得分:4)

在Groovy和许多其他动态语言中,一切都是对象,包括类本身。

假设您在java中有一个类Circle。你需要调用Circle.getClass()来处理类对象。在许多动态语言中,不需要指定类本身。假设你有一个班级

class Miu {}

以后每个对Miu的引用都将引用类对象本身

Miu.class
Miu

将评估到同一个对象

换句话说,Java和早期的C ++没有eval(),因此类定义本身不能直接成为类对象。其中的OO模型更像是面向类的编程而不是真正的面向对象,因为类巧妙地不是对象。在最近解释的动态语言中,类本身是直接对象。

答案 1 :(得分:3)

你混淆了两件不同的事情。当你引用某个特定的课程时,你不需要.class,所以如果你有一个Foo课,你想要引用它,你就不必输入Foo.class,你只需输入Foo。 (这就是你要链接到的文章描述的内容。)但是当你有一些对象而你想知道它的类时,你仍然会使用.class(其中.class实际上是调用它的简称) getClass方法)。请注意,如果你有一张地图,并且想要了解它的课程,你必须输入getClass(),这样就不会认为你没有提到一个名为' class&#39的地图键。 ;