我怎样才能做到这一点?
public class GenericClass<T>
{
public Type getMyType()
{
//How do I return the type of T?
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试的所有东西总是返回类型Object而不是使用的特定类型.
我正在尝试创建一个包装器Retrofit来抽象我的服务实现.到目前为止,我已经成功编译了编译器:
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 …Run Code Online (Sandbox Code Playgroud) 我有一个从服务中读取JSON的方法,我正在使用Gson进行序列化,并使用类型参数编写了以下方法.
public T getDeserializedJSON(Class<T> aClass,String url)
{
Reader r = getJSONDataAsReader(url);
Gson gson = new Gson();
return gson.fromJson(r, aClass);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用json,它只返回一个类型的数组,例如
[
{ "prop":"value" }
{ "prop":"value" }
]
Run Code Online (Sandbox Code Playgroud)
我有一个映射到这个对象的java类,我们称之为MyClass.但是要使用我的方法,我需要这样做:
RestClient<ArrayList<MyClass>> restClient = new RestClient<ArrayList<MyClass>>();
ArrayList<MyClass> results = restClient.getDeserializedJSON(ArrayList<MyClass>.class, url);
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚它的语法.仅传递ArrayList.class不起作用.
那么有没有办法可以摆脱Class参数或者如何获取MyClass的ArrayList类?