gpt4 book ai didi

java - 作为方法参数的泛型类型参数

转载 作者:行者123 更新时间:2023-12-01 17:49:37 25 4
gpt4 key购买 nike

我有通用接口(interface):

public interface StreamObserver<V>  {
void onNext(V value);
}

并且必须为不同类型创建对象(SubscribeTradesResponseSubscribeOrderResponse):

1)

StreamObserver<SubscribeTradesResponse> getTradesResponseStream() {
return new StreamObserver<SubscribeTradesResponse>() {
@Override
public void onNext(SubscribeTradesResponse response) {
responseOnNextAction(response);
}
};
}

2)

StreamObserver<SubscribeOrderResponse> getOrderResponseStream() {
return new StreamObserver<SubscribeOrderResponse>() {
@Override
public void onNext(SubscribeOrderResponse response) {
responseOnNextAction(response);
}
};
}

是否可以创建一个通用方法 getResponseStream() 并传递 SubscribeTradesResponseSubscribeOrderResponse 作为参数?

最佳答案

您可以通过使用 lambda 表达式做得更好,这将允许您摆脱 getTradesResponseStreamgetOrderResponseStream :

StreamObserver<SubscribeTradesResponse>  tradeObserver= response -> 
responseOnNextAction(response);
//or
StreamObserver<SubscribeTradesResponse> tradeObserver=
this::responseOnNextAction;

StreamObserver<SubscribeOrderResponse> orderObserver = response ->
responseOnNextAction(response);
//or
StreamObserver<SubscribeOrderResponse> orderObserver =
this::responseOnNextAction;

假设您已重载 responseOnNextAction相应地。

但是如果您要使用内部类,您仍然可以使该方法通用:

<T> StreamObserver<T> getTradesResponseStream() {
return new StreamObserver<T>() {
@Override
public void onNext(T response) {
responseOnNextAction(response);
}
};
}

但这取决于 responseOnNextAction 的签名。如果该方法采用 Object ,它将按原样工作。 ,但如果需要 Response在某种程度上,您可能必须将类型参数更改为
<T extends Response>

关于java - 作为方法参数的泛型类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51854402/

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