相关疑难解决方法(0)

将嵌套的Class <MyInterface <T >>作为Android中的参数传递

我正在尝试创建一个包装器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)

java generics android

15
推荐指数
1
解决办法
1332
查看次数

无法选择参数化类型

我想创建一个休息来在服务器和客户端之间进行通信.

下面给出的构造函数:

public class RestHelper<I, R> {
    public RestHelper(String url, I input, Class<R> output){
        ResponseEntity<R> responseEntity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, output );
    }
}
Run Code Online (Sandbox Code Playgroud)

对于普通类型,我可以这样做:

RestHelper<User, Result> helper = new RestHelper<>(url, user, Result.class);
Run Code Online (Sandbox Code Playgroud)

我如何传递泛型类型,如:

ResultContainData<Boolean>
Run Code Online (Sandbox Code Playgroud)

以下代码无效:

    ResultContainData<Boolean> result = new ResultContainData<>();
    RestHelper<User, ResultContainData<Boolean>> helper = new RestHelper<>(url, user, (Class<ResultContainData<Boolean>>) ((ParameterizedType) result.getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
Run Code Online (Sandbox Code Playgroud)

我收到了运行时错误:无法转换为ParameterizedType.

java spring

11
推荐指数
2
解决办法
2万
查看次数

标签 统计

java ×2

android ×1

generics ×1

spring ×1