zoukankan      html  css  js  c++  java
  • 坑爹的 Java 可变参数,把我整得够惨。。

    640?wx_fmt=jpeg

    最近在写一个功能点,用了 Java 中的可变参数,真是把我搞得够惨。。

    什么是可变参数?

    就是方法参数用 Object... args 三个点形式,一个参数可以接收多个参数。

    实际的代码就不帖了,来看这个示例吧:

    示例1

    public static void main(String[] args) {    test("name=%s&memo=%s", "Java技术栈", "666");}private static void test(String text, Object... params) {    String result = String.format(text, params);    System.out.println(result);}
        test("name=%s&memo=%s""Java技术栈""666");
    }

    private static void test(String text, Object... params{
        String result = String.format(text, params);
        System.out.println(result);
    }

    大家猜结果是什么?结果如我们想象:

    name=Java技术栈&memo=666666

    示例2

    public static void main(String[] args) {    test("name=%s&memo=%s", "Java技术栈");}private static void test(String text, Object... params) {    String result = String.format(text, params, "666");    System.out.println(result);}
        test("name=%s&memo=%s""Java技术栈");
    }

    private static void test(String text, Object... params{
        String result = String.format(text, params"666");
        System.out.println(result);
    }

    我把 "666" 移到了子方法里面,放到了 format 最后,再来看下结果是什么。

    name=[Ljava.lang.Object;@4cb2c100&memo=6664cb2c100&memo=666

    这并非是我想要的结果,把可变参数 params 数组对象地址作为值输出出来了,把我搞得够惨,最后我干掉了可变参数。。

    JDK里面很多有用到可变参数的,可实际开发中,并不建议使用可变参考,它带来的困扰和潜在的问题会远大于便利性,比如在方法重构、重写等也会带来很多问题。

    关于可变参数,也是有开发规范的,不能随便写。我找到了阿里巴巴的《Java开发手册》中关于可变参数的规约。

    相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object 。

    说明:可变参数必须放置在参数列表的最后。 ( 提倡同学们尽量不用可变参数编程 )

    正例: public ListlistUsers(String type, Long… ids) {…}

    获取这份阿里巴巴的Java开发手册最新PDF版,大家可以关注Java技术栈微信公众号,在后台回复:手册,即可获取。

    阿里巴巴也是不建议大家合作可变参数的,可知它带来的坑会有多坑。。

    另外,栈长已经整理了大量 Java 系列核心技术知识点文章,关注Java技术栈微信公众号,在后台回复关键字:java,即可获取最新版。

    最近干货分享

    图解 Java 垃圾回收机制,写得非常好!

    Eclipse 最常用的 10 组快捷键,个个牛逼!

    绝对 "牛X" 的代码注释,喜欢就拿去用!

    微服务配置中心对比,哪个更牛逼?

    分享一份Java架构师学习资料

    640

    点击「阅读原文」一起搞技术,爽~

  • 相关阅读:
    解决线程安全问题——同步方法
    Console Add Item –Java使用eBay API SDK刊登商品 详解
    解决Eclipse中新建jsp文件ISO8859-1 编码问题
    struts.xml配置详解
    public class Ex2
    ax2+bx+c=0的根的算法
    猜随机数
    中国的个税计算方法
    Javascript String类的属性及方法
    CSS各个浏览器Hack的写法
  • 原文地址:https://www.cnblogs.com/java-stack/p/11952256.html
Copyright © 2011-2022 走看看