java android接参_java – 在Android中传递嵌套类>作为参数

博主在尝试使用Retrofit创建一个服务层抽象,但在调用时遇到了类型参数化的问题,导致编译错误。问题源于类型擦除,使得编译器无法正确识别泛型。尽管已经理解了设计上的缺陷并找到了替代方案,但博主对于编译器在此处的行为感到好奇。文章探讨了Java语言中这种行为的有趣之处。
摘要由CSDN通过智能技术生成

我试图在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 void performGet(String url, final Class> clazz, com.example.spark.testapp.services.utils.Callback callback) {

Retrofit retrofit = new Retrofit.Builder().baseUrl("").build();

Get service = retrofit.create(clazz);

//Pass authentication token here

Call t = service.get(url, "");

executeCallback(callback,t);

}

public void performPost(String url, final Class> clazz,com.example.spark.testapp.services.utils.Callback callback) {

Retrofit retrofit = new Retrofit.Builder().baseUrl("").build();

Post service = retrofit.create(clazz);

//Pass authentication token here

Call t = service.post(url, "");

executeCallback(callback,t);

}

public void executeCallback( final com.example.spark.testapp.services.utils.Callback callback , Call call) {

call.enqueue(new Callback() {

@Override

public void onResponse(Call call, Response response) {

callback.onSuccess(response.body());

}

@Override

public void onFailure(Call 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);

}

});

}

}

在编译的时候,问题是调用方法:

private void getString() {

ServiceLayer s = new ServiceLayer();

s.performGet("",Get.class,this); //Cannot select from parameterised type

}

我在这里聊了一下,发现这是不可能的,因为类型擦除.精细.

但我的问题是,编译器不应该在这里提出错误吗?在这一行? :

public void performGet(String url, final Class> clazz, com.example.spark.testapp.services.utils.Callback callback)

我的服务层如何编译?

编辑

这个问题似乎被误解了.我不是在寻找一种让设计工作的方法.我了解其中的缺陷,我们找到了更好的方式来分层我们的服务.问题是关于语言本身的有趣/奇怪的行为.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值