我是一名经验丰富的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文档?
答案 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的地图键。 ;