在Java中限制子接口中的泛型类型 [英] Limit generic type in subinterface in Java

查看:245
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆