基本Java方式
class SomeModelController {
public void makeSomeRequest<T extends BaseJsonClass>(Type type, RequestCallback requestCallback) {
// Do request stuff.
requestCallback.success(Type.cast(sucessObject));
}
}
// Some code
ModelController.makeRequest<UserLoginResponse>(UserLoginResponse.class, new RequestCallback() {
public void success(UserLoginResponse sucessObject) {
// Object is now treated like response.
}
}
我知道C#没有类型的擦除器;所以我可以使用T(Generic as?) 我的C#课程和我在哪里挣扎:
public class Response<T> {
private Action<T> success;
private Action<FailedReason> failed;
public Response(Action<T> success, Action<FailedReason> failed) {
this.success = success;
this.failed = failed;
}
public void Success<T>(T objectSuccess) {
// ?? How to convert success object to type?
success.Invoke(objectSuccess);
}
public void Failed(FailedReason failedReason) {
failed.Invoke(failedReason);
}
}
修改1
我在编译时收到了编译器的以下抱怨:
I'm getting "Cannot implicitly convert T to T"
。
答案 0 :(得分:2)
您只需致电
即可public void Success(T objectSuccess) {
success(objectSuccess);
}
objectSuccess
的类型为T
。这正是Action<T> success
期望的参数。无需转换。
您可以将success
视为一个声明如下的方法:
void success(T arg)
{
}
正如Jorn Vernee所说,从<T>
移除Success<T>
。您不需要此方法的泛型类型参数,因为它使用类的泛型类型参数。如果由于某种原因,您需要为类和方法使用不同的泛型类型参数,则必须为它们指定不同的名称。但情况并非如此。