在Java中限制子接口中的泛型类型 [英] Limit generic type in subinterface in Java
本文介绍了在Java中限制子接口中的泛型类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
public interface ItemRequestConverter< IR extends ItemRequest> {
目标转换(IR请求);
}
public interface CreateItemRequestConverter< CIR extends CreateItemRequest>
扩展了ItemRequestConverter< ItemRequest> {
}
公共类CreatePartRequestConverter实现了CreateItemRequestConverter< CreatePartRequest> {
@Override
public target convert(CreatePartRequest request){
...
}
}
现在我想知道这是否可能。我不信。
当我创建 CreatePartRequestConverter
时,重写方法的签名是超类型 ItemRequest
。这是不希望的。
解决方案
我认为您的CreateItemRequestConverter类签名应该是这样的:
interface CreateItemRequestConverter< CIR extends CreateItemRequest>
扩展ItemRequestConverter< CIR> {b
$ b}
测试:
接口ItemRequestConverter< IR扩展ItemRequest> {
目标转换(IR请求);
}
interface CreateItemRequestConverter< CIR extends CreateItemRequest>
扩展ItemRequestConverter< CIR> {
}
类CreatePartRequestConverter实现了CreateItemRequestConverter< CreatePartRequest> {
@Override
public目标转换(CreatePartRequest请求){
返回null;
}
}
class ItemRequest {
}
类CreateItemRequest扩展ItemRequest {
}
class CreatePartRequest extends CreateItemRequest {
}
class Target {
}
Say I have this interface structure:
public interface ItemRequestConverter<IR extends ItemRequest> {
Target convert(IR request);
}
public interface CreateItemRequestConverter<CIR extends CreateItemRequest>
extends ItemRequestConverter<ItemRequest> {
}
public class CreatePartRequestConverter implements CreateItemRequestConverter<CreatePartRequest> {
@Override
public Target convert(CreatePartRequest request) {
...
}
}
Now I wondering whether this is possible at all. I doubt that.
When I create CreatePartRequestConverter
the signature of the overridden method is the super type ItemRequest
. This is not desired.
解决方案
I think your CreateItemRequestConverter class signature should be like this :
interface CreateItemRequestConverter<CIR extends CreateItemRequest>
extends ItemRequestConverter<CIR> {
}
Test :
interface ItemRequestConverter<IR extends ItemRequest> {
Target convert(IR request);
}
interface CreateItemRequestConverter<CIR extends CreateItemRequest>
extends ItemRequestConverter<CIR> {
}
class CreatePartRequestConverter implements CreateItemRequestConverter<CreatePartRequest> {
@Override
public Target convert(CreatePartRequest request) {
return null;
}
}
class ItemRequest {
}
class CreateItemRequest extends ItemRequest {
}
class CreatePartRequest extends CreateItemRequest {
}
class Target {
}
这篇关于在Java中限制子接口中的泛型类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文