美文网首页
对 Java 里方法的可变长参数列表使用的小经验

对 Java 里方法的可变长参数列表使用的小经验

作者: 阪本先生 | 来源:发表于2017-12-05 15:01 被阅读0次

Java好像自从1.6就已经可以使用void method(String... s)的方法声明参数列表,这个声明方式挺好玩的,我分享一下我的使用经验。

这个声明有一个特点,就是可变长的参数声明必须在传参列表的最后面。也就是说,void method(Object o, String... s)可以,但是void method(String... s, Object o)是不符合语法的。String... s是半个语法糖,可变长参数列表只能放在传参的最后面。那么这样子用起来某些场合就有那么点小限制了,但是这并不太妨碍,只要这样就行了。

void method(String[] s, Object o){
    //Codes...
}

void method(Object o, String... s){
    method(s,o);
}

上面举例的代码可能太抽象,我用我的实际应用场景来继续说明一下。为了方便说明,我先给一些刚入门的同学介绍一下SpringData。这里的介绍摘自官网首页,并附上我的翻译。

Spring Data’s mission is to provide a familiar and consistent, Spring-based programming model for data access while still retaining the special traits of the underlying data store.

It makes it easy to use data access technologies, relational and non-relational databases, map-reduce frameworks, and cloud-based data services.

Spring Data 的任务是提供一个符合标准和习惯的、保留了一些底层数据访问特性的、基于 Spring 的访问数据的框架,让使用关系型数据库、非关系型数据库、MapReduce 框架(MapReduce 是 Google 提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算)以及云端数据服务等数据访问技术变得更加方便。

那么接下来我有这么一串代码在DAO接口里:

@Query("select a from Article a where a.status in ?1")
Page<Article> findAll(String[] status, PageRequest pageRequest);

PS:这是一个符合Spring Data 规范的 PagingAndSortingRepository 接口子接口方法声明规范的一个方法。在这个接口里面声明的方法,能够通过 ?1 的方式传入到上面的 @Query 注解里的 JQL(JIRA Query Language)语句里面。

这个方法用途是从存放 Article 对象的表中查询出符合 status 数组里条件的数据并返回成分页查询对象。根据规范,我的分页请求必须在参数列表里,但是为了方便以后编程,我想使用可变长参数列表,于是就撞上了语法限制了。但是想一下,DAO 上一层就是 Services 层,Services 层代理了 DAO 的访问。于是结合之前讲的原理,我在 Services 层里的一个代理方法里这样写

public Page<Article> getAllArticle(PageRequest pageRequest, String... status) {
    return articleDAO.findAll(status, pageRequest);
}

这样就能愉快地使用可变长参数列表啦。

getAllArticle(new PageRequest(),"shown","hidden","banned");

之前考虑到如果只传一个参数的话会怎么。答案其实显而易见,就是传进来一个只有一个元素的数组。因为它是把可变长参数包装成了数组,原因是 String... a; 其实是 Java 里面的一种声明数组的方式。

相关文章

  • 对 Java 里方法的可变长参数列表使用的小经验

    Java好像自从1.6就已经可以使用void method(String... s)的方法声明参数列表,这个声明方...

  • 【Python】Arg and kwargs

    *args **kwargs 变长参数。Python支持可变长度的参数列表,可以通过在函数定义的时候使用args和...

  • Scala可变参数列表,命名参数和参数缺省

    重复参数 Scala在定义函数时允许指定最后一个参数可以重复(变长参数),从而允许函数调用者使用变长参数列表来调用...

  • Kotlin 可变长参数函数

    何为可变长参数 参数的数量不限,java中...kotlin中使用 vararg 关键字进行标识 kotlin中用法

  • Scala中的Repeated Parameters

    Scala允许函数的最后一个参数是可重复的(Repeated)。这使得用户可传递变长参数列表给函数。为了指示出可重...

  • 007_scala编程详解函数入门之变长参数

    变长参数 使用序列调用变长参数 scala知识点

  • Java变长参数

    一看到“fun(String ... strs)”就感觉写法很?,所以今天自己尝试一下,发现是一个很简单但确很实用...

  • kotlin基础语法

    函数定义 有返回值的函数 无返回值的函数(类似Java中的void): 可变长参数函数 静态方法 Java代码: ...

  • list列表

    1. sort()方法 对原列表进行排序 描述sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数...

  • 改善Java程序建议6

    建议6:覆写变长方法也循规蹈矩 覆写必须满足的条件: 重写方法不能缩小访问权限。 参数列表必须与重写方法相同。 返...

网友评论

      本文标题:对 Java 里方法的可变长参数列表使用的小经验

      本文链接:https://www.haomeiwen.com/subject/rlrcixtx.html