如果在私有构造函数中初始化,则从静态方法访问时,保证私有静态字段为非null

Meh*_*kri 2 java static initialization

我有一个名为UrlControllerThe class的类,如:

public class UrlController {
    private static final String BASE_URL = "http://api.site.mil/";       

    private static Retrofit retrofit;

    private UrlController() {
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }

    public static Retrofit getRetrofit() {
        return retrofit;
    }
} 
Run Code Online (Sandbox Code Playgroud)

我应该检查if(retrofit==null)getRetrofit()方法,或者它始终没有空?

Ell*_*sch 10

没有什么可以构造UrlController(UrlController因为你的构造函数是private)所以retrofit保证是这样null.我想你想要一个static初始化器.就像是,

static {
    retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
}
Run Code Online (Sandbox Code Playgroud)


dry*_*hip 5

由于该方法getRetrofitstatic,因此它可以被称为,即使当还没有被创建的类的对象.

因此,您必须检查它.

但即使您不检查,该方法也会返回null.因此,您必须在调用此方法的位置检查null.