gpt4 book ai didi

java - c#模型抽象和泛型,像Java一样强制转换未知泛型

转载 作者:行者123 更新时间:2023-12-02 03:31:21 26 4
gpt4 key购买 nike

基本的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 (通用?)我的 C# 类(class)以及我遇到的困难:

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我从编译器收到以下投诉:
尝试编译时出现“无法隐式将 T 转换为 T”

最佳答案

您只需调用

public void Success(T objectSuccess) {
success(objectSuccess);
}

objectSuccess类型为T 。这正是 Action<T> success期望作为参数。无需转换。

你可以想到success作为这样声明的方法:

void success(T arg)
{
}

正如 Jorn Vernee 所说,删除 <T>来自Success<T> 。此方法不需要泛型类型参数,因为它使用类的泛型类型参数。如果由于某种原因您需要为类和方法使用不同的泛型类型参数,则必须为它们指定不同的名称。但这里的情况并非如此。

关于java - c#模型抽象和泛型,像Java一样强制转换未知泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38040485/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com