Я пытаюсь получить метод из интерфейса.
Я читал о функции getMethod (), и, как сказано в документе,
public Method getMethod(String name, Class<?>... parameterTypes)
- это объявление для java.lang.Class.getMethod ().Метод
У меня нет проблем с методами, которые простые типы вроде
Call<ApiR<SelfVM>> Get(String value);
здесь передают String.class работает правильно
но когда методу нужен универсальный класс , я немного запутался в этом, и
вот мой вопрос
чтоесли я передам вместо parameterTypes в таких методах, как
Call<ApiR<SelfVM>> Set(SendR<SelfVM> vm);
SendR и SelfVM классы
public class SendR <T> {
private T value;
private String token;
public SendR(T value, String token) {
this.value = value;
this.token = token;
}
}
public class SelfVM {
private String id;
private String name;
private String lastName;
public SelfVM(String id, String name, String lastName) {
this.id = id;
this.name = name;
this.lastName = lastName;
}
}
и вот что я попробовал
Функция CalculateResult:
protected static void CalculateResult(final Object interfaceObject,
final String methodName,
final Class<?> viewModelClassType,
final Object viewModelObject,
final CalculateResultCallBack callBack) {
Method method;
Call<ApiR> result = null;
method = interfaceObject
.getClass()
.getMethod(methodName, viewModelClassType);
result = (Call<ApiR>) method.invoke(interfaceObject, viewModelObject);
}
и здесьэто где я вызываю функцию CalculateResult
static SelfInterface apiService =
ApiSetting.getClient().create(SelfInterface.class);
public static void get(CalculateResultCallBack<SelfVM> callBack) {
CalculateResult(apiService, "Get", null,
null, callBack);
}
public static void set(SendR<SelfVM> vm, CalculateResultCallBack<SelfVM> callBack) {
CalculateResult(apiService, "Set", SendR.class, vm, callBack);
}
ApiSetting.getClient ()
public class ApiSetting {
public static Retrofit getClient() {
if (retrofit == null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build();
}
return retrofit;
}
}
получить и установить методы
@GET("json.txt")
Call<ApiR<SelfVM>> Get();
@PUT("json.txt")
Call<ApiR<SelfVM>> Set(SendR<SelfVM> vm);