(Retrofit 2.0 beta 2)方法做了什么? 我可以在哪里应用此方法?Retrofit 2.0中的validateEagerly()方法(beta 2)
JavaDoc说,When calling create on the resulting Retrofit instance, eagerly validate the configuration of all methods in the supplied interface.
但这个描述不是很清楚。
(Retrofit 2.0 beta 2)方法做了什么? 我可以在哪里应用此方法?Retrofit 2.0中的validateEagerly()方法(beta 2)
JavaDoc说,When calling create on the resulting Retrofit instance, eagerly validate the configuration of all methods in the supplied interface.
但这个描述不是很清楚。
验证您在构建Retrofit
实例时提供的配置。这将检查你的接口注释是否有效的改进注释,参数和方法参数的检查,如果它们与注释集合一致,那么这也检查可能的不正确的方法返回类型(不同于Call<T>
)。
检查通常在您构建Retrofit
实例之前调用。
private Retrofit getRetrofit() {
OkHttpClient okClient = getOkHttpClient();
GsonBuilder builder = getGsonBuilder();
Retrofit.Builder retrofitBuilder = new Retrofit.Builder();
retrofitBuilder.client(okClient);
retrofitBuilder.baseUrl(API_ENDPOINT);
retrofitBuilder.addConverterFactory(GsonConverterFactory.create(builder.create()));
retrofitBuilder.validateEagerly();
return retrofitBuilder.build();
}
它可以抛出IllegalArgumentException
与不同的消息和原因,如果有什么是无效的。
,如果你想尽快验证您的接口中的所有方法,你想validateEagerly(true)
public <T> T create(final Class<T> service) {
Utils.validateServiceInterface(service);
if (validateEagerly) {//here
eagerlyValidateMethods(service);
}
return (T) Proxy.newProxyInstance(service.getClassLoader(), new Class<?>[] { service },
new InvocationHandler() {
private final Platform platform = Platform.get();
@Override public Object invoke(Object proxy, Method method, Object... args)
throws Throwable {
// If the method is a method from Object then defer to normal invocation.
if (method.getDeclaringClass() == Object.class) {
return method.invoke(this, args);
}
if (platform.isDefaultMethod(method)) {
return platform.invokeDefaultMethod(method, service, proxy, args);
}
ServiceMethod serviceMethod = loadServiceMethod(method);
OkHttpCall okHttpCall = new OkHttpCall<>(serviceMethod, args);
return serviceMethod.callAdapter.adapt(okHttpCall);
}
});
}
// validate your all methods
private void eagerlyValidateMethods(Class<?> service) {
Platform platform = Platform.get();
for (Method method : service.getDeclaredMethods()) {
if (!platform.isDefaultMethod(method)) {
loadServiceMethod(method);
}
}
}
//thie method will cash method in LinkedHashMap
ServiceMethod loadServiceMethod(Method method) {
ServiceMethod result;
synchronized (serviceMethodCache) {
result = serviceMethodCache.get(method);
if (result == null) {
result = new ServiceMethod.Builder(this, method).build();
serviceMethodCache.put(method, result);
}
}
return result;
}