【问题标题】:Generic Type in Java: "Cannot resolve method" errorJava 中的通用类型:“无法解析方法”错误
【发布时间】:2022-07-06 21:37:20
【问题描述】:

我有以下实现,并尝试在我的 Java 应用程序中通过泛型使用 2 种类型:

服务:

public interface PDFService<T, S> {

    String generatePdf(UUID uuid);
}

ServiceImpl:

@Service
@RequiredArgsConstructor
public class PDFServiceImpl<T, S> implements PDFService<T, S> {

    private final T brandService;
    private final S brandProductFinder;

    public String createHtml(UUID uuid) {

        // cannot recognize findByUuid method
        BrandDTO brandDTO = brandService.findByUuid(brandUuid); 

        // ...
    }

    private void setProductInformationToHtml(Context context, BrandDTO brandDTO) {
        // cannot recognize findAll method
        List<ProductDTO> productDTOS = new ArrayList<>(brandProductFinder.findAll(request)); 
        // ...
    }
}


控制器:

public class PDFController {

    // code omitted for brevity

    private final PDFService<BrandService, BrandProductFinder> pdfService;

    public String createPdf(@PathVariable UUID uuid) {
        return pdfService.createPdf(uuid);
    }
}

我没有更改 BrandService 中的任何内容,但不知道我的实现有什么问题。那么,如何在这种情况下正确使用泛型呢?我也尝试使用PDFService&lt;T, S extends ProductFinder&gt;,但不确定在服务和服务实现中的正确使用。有什么想法吗?

【问题讨论】:

    标签: java oop generics interface polymorphism


    【解决方案1】:

    如果您的 BrandService 和 BrandProductFinder 也实现了一些接口。您可以使泛型类型有界。本质上“缩小”了 PDFService 接受的可能类型。

    Bounded Type Parameters

    public interface PDFService<T extends BoundedSerivce, S BoundedItemFinder> {
    
        String generatePdf(UUID uuid);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-26
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多