代码之家  ›  专栏  ›  技术社区  ›  notnoop

Java的Groovy超集[重复]

  •  5
  • notnoop  · 技术社区  · 16 年前

    Groovy是Java的超集吗?如果不是,Groovy和Java之间有什么不兼容之处?

    我所说的超集,是指源代码向后兼容性,从这个意义上说:你可以把一个Java文件编译成Groovy源代码文件,它会像以前一样工作。Groovy的目标是使其与Java非常相似,以最小化学习曲线。然而,在Groovy 1.7之前,它不支持匿名内部类等。

    我看过一些文章提出这样的主张,但我还没有看到它在网上得到证实 Groovy website .

    4 回复  |  直到 4 年前
        1
  •  7
  •   Pascal Thivent    16 年前

    Groovy是Java的超集(即源代码兼容)吗?如果不是,那么现在Java和Groovy之间有什么不兼容之处?

    Groovy“扩展”了Java,Groovy和Java之间存在差异(Java编译器无法编译Groovy文件)。页面 Differences from Java 列出Java和Groovy之间的所有主要区别。也就是说,Groovy编译器可以将Groovy文件转换为。可以使用Java Intepreter运行的类文件(这需要 groovy-all-VERSION.jar 在类路径上)。这能回答问题吗?

        2
  •  5
  •   Dónal    16 年前

    我在那页上没有看到的一个区别是重载方法的解决方式。在Java中,它基于参数的编译时类型,而在Groovy中,它基于运行时类型。例如,假设你在一个类中有这些方法

    void doIt(Object o) {}  // Java
    void doIt(String s) {}  // Groovy
    

    以下代码:

    Object o = "foo";
    

    如果是Groovy代码,则调用带有字符串参数的方法;如果是Java代码,则调用带有对象参数的方法。Groovy将此功能称为“多方法”。

        3
  •  1
  •   Angel O'Sphere    15 年前

    在groovy中,具有包访问权限的属性(我应该称之为属性或实例变量)会自动将setter和getter方法编译到类文件中。

    这意味着如果你保存一个*。java文件格式为*。groovy文件,您有一个类似“String namegroovy编译器将生成一个setter和一个getter。java编译器不会。如果java文件中已经有了getter,groovy编译器甚至可能会抱怨方法定义重复。

    然而,除非是罕见病例,大多数*。java文件由groovy编译器编译,没有任何问题。

    安杰洛

        4
  •  0
  •   Adam Burley    10 年前

    另一个未在该页列出的区别是分号的使用。每一行都应该以分号结尾(但可以省略)。

    以下代码不在Groovy上编译,而是在Java上编译:

    String s = "hello "
    + "world";
    println(s); // Assuming there is a local method with name "println" (available by default in Groovy but you have to create it in Java)