【发布时间】:2018-05-27 01:40:30
【问题描述】:
假设包com.my.package中存在三个类MyClass1、MyClass2、MyClass3。在其他地方的方法中,我尝试创建一个泛型类型实例,其中每个类只代表一次回调的类型:
call.enqueue(new Callback<MyClass1>(){...});
call.enqueue(new Callback<MyClass2>(){...});
call.enqueue(new Callback<MyClass3>(){...});
我想实现对特定包中的类的自动检测,然后创建这种类型的泛型,而不是手动输入每个类。
需要此功能,因为可以在 com.my.package 中添加或删除类,并且我不想在其他地方更改代码。即使我可以访问 java.lang.Class 对象的列表,我仍然无法从 Class 对象中生成泛型类型。我知道泛型的类型不能在运行时声明(因此反射已经结束),但是,在我看来,所有必需的信息在编译时都可用。
有没有办法做到这一点?
(在我使用 Retrofit 的应用程序中,Gson 需要尖括号中 POJO 的具体类型才能解析 JSON 数据。底层模型非常复杂并且可以更改。)
【问题讨论】:
-
如果您正在使用
Retrofit和Gson,在您的回调中response.getBody()已经为您提供了您的类的实例 -
是的,但是我在调用
call.enqueue(new Callback<TypeOfResponseIWannaHave>(){...})时必须预先确定类型 -
您想要为您的所有
Call<...>api 提供通用回调? -
为什么需要初始化?你只是从你的回应中得到实例。你不应该创建响应
标签: java generics callback retrofit2