Effective Java - 慎用重载

第52条 慎用重载

  1. 使用重载机制比较安全而保守的策略是:永远不要导出两个具有相同参数数目的重载方法。如果方法使用可变参数(varargs),保守的策略是不要重载它

  2. 对于重载的这项限制并不麻烦,因为始终可以给方法起不同的名称而不使用重载机制

  3. 对于构造器,可以选择导出静态工厂

  4. 对于每一种重载方法,至少有一个对应的参数在两个重载方法中具有根本不同的类型,就不会产生迷惑。 在这种情况下主要的混淆根源就消除了

  5. 需要注意Listremove方法,它有一个重载分别是remove(E)remove(int)。如果一个List<Integer>调用了remove(int)

    public static void main(String[] args) {
      List<Integer> list = new ArrayList<>(List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
      list.remove(2);
      System.out.println(list);
    }
    
    >>> [1, 2, 4, 5, 6, 7, 8, 9, 10]
    
  6. 应该让更具体化的重载方法把调用转发给更一般化的重载方法

思考

  1. 重载一般是不会发生的,有的时候是不小心把方法名取成了一个已经存在的名字。避免不小心使用重载的方法,我一般是先在方法的实现里面写好调用,再把还没有声明的方法声明出来。这时候IDE会提醒你这个类里面已经声明的方法,所以在想方法名的时候就可以避开已经存在的名称了。
image.png

当然不是所有人都习惯先写出来没有声明过的方法,这个只是我自己的一个习惯

  1. 我们经常出现的重载就是像文章中提到的"具体化的重载方法把调用转发给更一般化的重载方法",这种重载是相对合理的

    private void testMethod1() {
      testMethod1(true);
    }
    
    private void testMethod1(boolean needCreate) {
    
    }
    
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容