parametre olarak Class
package com.example.spark.testapp.services;
import com.example.spark.testapp.services.apis.Get;
import com.example.spark.testapp.services.apis.Post;
import com.example.spark.testapp.services.utils.*;
import com.example.spark.testapp.services.utils.Error;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
public class ServiceLayer {
public <T> void performGet(String url, final Class<Get<T>> clazz, com.example.spark.testapp.services.utils.Callback<T> callback) {
Retrofit retrofit = new Retrofit.Builder().baseUrl("").build();
Get<T> service = retrofit.create(clazz);
//Pass authentication token here
Call<T> t = service.get(url, "");
executeCallback(callback,t);
}
public <T> void performPost(String url, final Class<Post<T>> clazz,com.example.spark.testapp.services.utils.Callback<T> callback) {
Retrofit retrofit = new Retrofit.Builder().baseUrl("").build();
Post<T> service = retrofit.create(clazz);
//Pass authentication token here
Call<T> t = service.post(url, "");
executeCallback(callback,t);
}
public <T> void executeCallback(final com.example.spark.testapp.services.utils.Callback<T> callback , Call<T> call) {
call.enqueue(new Callback<T>() {
@Override
public void onResponse(Call<T> call, Response<T> response) {
callback.onSuccess(response.body());
}
@Override
public void onFailure(Call<T> call, Throwable t) {
///Find out what exactly went wrong. Populate Error. and then...
com.example.spark.testapp.services.utils.Error e = new Error();
callback.onFailure(e);
}
});
}
}
bu derler iken, sorun yöntemini çağırarak noktasında geçerli:
private void getString() {
ServiceLayer s = new ServiceLayer();
s.performGet("",Get<String>.class,this); //Cannot select from parameterised type
}
Bu biraz etrafına Googled ve öğrendim Bu tip silme nedeniyle mümkün değildir. İnce.
Ama soru, derleyici burada bir hata yükseltmek gerekmez mi? Bu hatta mı? :
public <T> void performGet(String url, final Class<Get<T>> clazz, com.example.spark.testapp.services.utils.Callback<T> callback)
Hizmet katmanım nasıl derlendi?
DÜZENLEME
soru yanlış gibi görünüyor. Bu tasarımın işe yaraması için bir yol aramıyorum. İçindeki kusuru anlıyorum ve hizmetlerimizi katmanlaştırmanın daha iyi bir yolunu bulduk. Soru, dilin kendisinin ilginç/garip davranışlarıyla ilgilidir.
ben 'this' uygular' Geri arama 'varsayıyorum? –
njzk2
related: http://stackoverflow.com/questions/27000227/cannot-select-parameterized-type – njzk2
@ njk2 - Evet. Haklısın. Bu, Geri Arama uygular. Ve hiç de alakalı değil. Soru şu ki, sadece çağrı yapamazsanız servis katmanım nasıl derlenir? –
avismara