返回?扩展类型

时间:2019-09-25 01:02:09

标签: java oop inheritance polymorphism

我想要一个看起来像这样的方法签名:

public <? extends IDto> convertToResponseDto();

我从一个看起来像这样的有效签名中想到了这一点:

public List<? extends IDto> convertToResponseDto();

事实证明,Type <? extends IDto>不是有效的返回类型。我觉得我要返回的内容的意图很明确,但是不确定正确的语法是什么

编辑

@ErwinBolwidt回答了这个问题,但是在用例中提出了一个新问题。我在使用泛型的情况下:

protected final <E extends IDto> E findOneInternal(final Long id) {
        return getService().findOne(id).convertToResponseDto();
}

在这种情况下,convertToResponseDto()返回IDto,而不返回具体类,因为它获得了T类型的服务,所以在此品脱中尚不知道

2 个答案:

答案 0 :(得分:2)

您可以使用更具体的子类型作为返回类型来覆盖接口方法或超类方法。说您的超人说

public IDto convertToDTO()

然后您的子类可以说

public MySpecificDTO convertToDTO() 

这是Java语言所隐含的,不需要任何泛型。

答案 1 :(得分:0)

您可以定义通用类型

public <T extends IDto> T convertToResponseDto();