一个例子是:
SBHttpRequest<D extends SBHttpDeserializer<?>, RBT>
:这可以很好地编译,但响应类的类型不受限制
SBHttpRequest<D extends SBHttpDeserializer<RT>, RBT>
:这不会编译:RT 无法解析为类型
我也试过 SBHttpRequest<D<RT> extends SBHttpDeserializer<RT>, RBT>
:它告诉我
< > 在错误的地方
D 是扩展 SBHttpDesrializer 的反序列化器类 RT 是响应类型或解串器将响应更改为的类型 RBT 是请求体类型(在这个例子中总是一个 byte[])
我想使用响应类型来限制类中的一些条件并清除一些原始类型的编译器警告。
答案 0 :(得分:1)
要么为返回类型添加泛型类型参数,要么在想要锁定类型时创建一个类/接口:
class ByteArraySBHttpDeserializer implements SBHttpDeserializer<byte[]> {}
那么:
SBHttpRequest< ByteArraySBHttpDeserializer, RBT>
它有点笨重,但泛型也是。
答案 1 :(得分:0)
我最终采用了 Turing85 的想法。
只包含类型
尽管 sonarlint 抱怨通用名称大于 1 个字符:
public class SBHttpRequest<RESPONSE_TYPE, DESRERIALIZER_TYPE extends SBHttpDeserializer<RESPONSE_TYPE>, REQUEST_BODY_TYPE>