关注对象的new-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

关注对象的new

简介:

对象创建得不好,会引发OOM,和常见的代码难维护问题。

优先通过静态方法替换构造器

通过静态方法而不是构造器的优势

Maps.newHashMap();
public static <K, V> HashMap<K, V> newHashMap() {
    return new HashMap<K, V>();
  }

1:有方法名可以用来区分场景(valueof,of,getInstance,newInstance,getXXX,newXXX)
2:帮助复用对象(valueof,of)和单例(getInstance)
3:通过声明接口可以返回任意实现类
4:减少多余的范型声明

劣势
1:静态方法往往配合私有构造器,导致类本身无法extends
2:调用的时候没有语法支持,无法快速识别这是一个构造方法

Builder

当有多个构造器的常见的时候,用Builder模式。

public class Person {
    private final String name;
    private final int age;

    private Person(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
    }

    public static class Builder{

        private   String name;
        private   int age;
        public Builder(String name){
            this.name=name;
        }
        public Builder age(int age){
            this.age = age;
            return this;
        }

        public Person build(){
            return new Person(this);
        }
    }
}

复用对象

1:可以“string”的时候,不要new String(“string”)
2:对象是不可变是,能不new 的尽量共同同一个。参考数据库连接池
3:能long的时候,不要用Long,避免触发装箱拆箱产生多余消耗
4:当对象是pojo是,不要为了复用反复拷贝。

对象无用的时候,记得消除对象的引用

array[i] = null;可以让gc有效

单例的创建

1:final static instance配合private 构造函数{throw new Runtime();}
2:单个的枚举本身
3:扩展的provider 模式,如guice ,spring,guava等包装过的单例

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: