我有一个名为UrlController
的类,方法如下:
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;
}
}
我应该检查if(retrofit==null)
方法中的getRetrofit()
还是始终不为空?
答案 0 :(得分:10)
没有任何内容可以构建UrlController
(UrlController
除外,因为您的构造函数为private
)因此retrofit
保证为null
。我想你想要一个 static
初始值设定项。像,
static {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
答案 1 :(得分:5)
由于方法getRetrofit
是static
,因此即使尚未创建类的对象,也可以调用它。
因此,您必须检查它。
但即使您不检查,该方法也会返回null
。因此,您必须在调用此方法的地方检查null。
答案 2 :(得分:2)
您是否尝试创建单身人士?
因为现在你有一个只能在类中调用的私有构造函数。因此,您的改装字段将始终为null。此外,你可能想要使用这样的东西:
assets/
通过它你可以简单地调用public final class UrlController {
private static final String BASE_URL = "http://api.site.mil/";
private static volatile Retrofit instance;
private UrlController() {
instance = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public static Retrofit getInstance() {
if (instance == null) {
synchronized (UrlController.class) {
if (instance == null) {
instance = new UrlController();
}
}
}
return instance;
}
}
,你永远不会得到它。