`
liuxinglanyue
  • 浏览: 571676 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Groovy是怎么实现createArray的

阅读更多

Groovy是一个基于 Java虚拟机的敏捷 动态语言。构建在强大的Java语言之上 并 添加了从Python,Ruby和Smalltalk等语言中学到的 诸多特征。为Java开发者提供了 现代最流行的编程语言特性,而且学习成本很低(几乎为零)。在以前的酷壳的五大基于JVM的脚本语言中也介绍过它。

下面,让我们看看他的一个createArray的实现,请大家前去围观下面的Groovy的trunk上的源码吧。真是很好很强大。

http://svn.codehaus.org/groovy/trunk/groovy/groovy-core/src/main/org/codehaus/groovy/runtime/ArrayUtil.java

这里摘上前几个createArray重载函数让大家看看,(一共有250个重载函数)

public class ArrayUtil {
    ... ...
    ... ...
 public static Object[] createArray(Object arg0, Object arg1) {
 return new Object[]{
 arg0, arg1};
 }
 
 public static Object[] createArray(Object arg0, Object arg1, Object arg2) {
 return new Object[]{
 arg0, arg1, arg2};
 }
 
 public static Object[] createArray(Object arg0, Object arg1, Object arg2, Object arg3) {
 return new Object[]{
 arg0, arg1, arg2, arg3};
 }
 
 public static Object[] createArray(Object arg0, Object arg1, Object arg2, Object arg3, Object arg4) {
 return new Object[]{
 arg0, arg1, arg2, arg3, arg4};
 }
 
 public static Object[] createArray(Object arg0, Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) {
 return new Object[]{
 arg0, arg1, arg2, arg3, arg4, arg5};
 }
 ... ...
 ... ...
}
 这里给了一些解释

 

  • First: the package is org.codehaus.groovy.runtime. This is NOT a class that any user of Groovy will ever use. There are plenty of XML utilities in groovy.lang or groovy.xml for you to use.
  • Second: This class is never invoked from code. It exists so that byte code statements have something to link against. If you dump the stack language of a .class file you may indeed see a “INVOKESTATIC org/codehaus/groovy/runtime/XMLUtil” invocation. This logic is used around the CallSite writing features.
  • Third: Implementing a dynamic language (Groovy) in a static language (Java) on a type less virtual machine (JVM) is hard. Every language has their work arounds. We generated some code so that we had something to link against. At one point, JRuby was generating reams of interfaces (IIRC) and have you seen the implementation of OpenJDK? Ever notice now many methods are overloaded for all the primitives plus Object. These are all workarounds to get the end user a good programming experience while still running on the JVM.

大意是:这个类对于Groovy的使用者是不会用到的,也不会被调用到,因为在JVM下实现动态语言是有一定的难度,这算是一个work around。

转自:http://coolshell.cn/articles/3335.html

分享到:
评论

相关推荐

    JazzyViewPager加FragmentTabHost实现多样式滑动App的基本布局Studio篇

    ```groovy dependencies { implementation 'com.viewpagerindicator:jazzylib:2.0.1' } ``` 然后,在布局文件中替换原本的`ViewPager`为`JazzyViewPager`,并设置所需的动画效果。例如,我们可以设置“cube_in_out...

    android端的图片上传

    ```groovy implementation 'com.android.volley:volley:1.2.1' ``` 2. **创建RequestQueue**:在你的应用程序中,你需要创建一个`RequestQueue`实例,它是Volley工作的核心。通常在Application类或BaseActivity...

    Android list转json工具类

    JSON主要包含两种数据结构:对象(Object)和数组(Array)。在Java中,对象对应于HashMap或自定义类实例,数组对应于ArrayList或LinkedList等。在将List转换为JSON时,我们通常会将每个列表元素转换为一个JSON对象...

    java连接mongdb jar包

    总的来说,Java连接MongoDB jar包是Java开发者与NoSQL数据库交互的基础,通过理解和熟练使用这个库,我们可以轻松地在Java应用中集成MongoDB,实现高效的数据存储和检索。随着技术的发展,MongoDB的Java驱动程序也在...

    Android解析——json解析为javabean

    我们将主要使用Google提供的Gson库,它是一个强大的JSON库,可以便捷地实现JSON到Java对象的映射。 首先,我们需要了解JSON的基本结构。JSON(JavaScript Object Notation)基于JavaScript的一个子集,主要由对象...

    Gson对几种情况json数据解析Demo

    通过理解其基本用法和高级特性,开发者可以轻松地在Java应用中实现JSON与Java对象之间的相互转换。无论数据结构多么复杂,Gson都能提供高效且可靠的解决方案。在实际项目中,结合GsonDemo2等示例代码进行实践,将有...

    java-gson-usage:Java GSON Json 转换(使用)

    - 数组:`String[] array = gson.fromJson(jsonArrayString, String[].class);` - 集合:`List<String> list = gson.fromJson(jsonArrayString, new TypeToken<List<String>>(){}.getType());` - Map:`Map, String>...

Global site tag (gtag.js) - Google Analytics