作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有通用接口(interface):
public interface StreamObserver<V> {
void onNext(V value);
}
并且必须为不同类型创建对象(SubscribeTradesResponse
和SubscribeOrderResponse
):
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()
并传递 SubscribeTradesResponse
或 SubscribeOrderResponse
作为参数?
最佳答案
您可以通过使用 lambda 表达式做得更好,这将允许您摆脱 getTradesResponseStream
和getOrderResponseStream
:
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/
我是一名优秀的程序员,十分优秀!