Java 使方法通用

Java 使方法通用,java,generics,Java,Generics,我有不同的文档,例如一个文档指的是一个客户,另一个文档指的是另一个客户。我有一个Pdf(通用)类,其中包含在不同Pdf文档之间共享的方法>然后我有一个将PDDocument类型对象转换为页面包装器类的方法 我怎样才能不创建页面,而是创建泛型并返回client.Page或client1,Page的提升 public List<Page> splitToPages() { try { Splitter splitter = new Splitter();

我有不同的文档,例如一个文档指的是一个客户,另一个文档指的是另一个客户。我有一个Pdf(通用)类,其中包含在不同Pdf文档之间共享的方法>然后我有一个将PDDocument类型对象转换为页面包装器类的方法

我怎样才能不创建页面,而是创建泛型并返回client.Page或client1,Page的提升

 public List<Page> splitToPages() {
    try {
        Splitter splitter = new Splitter();
        return splitter.split(getPDDocument()).stream().map(Page::new).collect(Collectors.toList());
    } catch (IOException e) {
        throw new RuntimeException("Document could not be split", e);
    }
}
公共列表拆分页(){
试一试{
拆分器拆分器=新拆分器();
返回splitter.split(getPDDocument()).stream().map(Page::new).collect(Collectors.toList());
}捕获(IOE异常){
抛出新的RuntimeException(“无法拆分文档”,e);
}
}

感谢您

传入一个
函数
,该函数从拆分器中取出内容,并将其转换为您想要的类型:

 public <T> List<T> splitToPages(Function<? super WhateverSplitterReturns, ? extends T> function) {
    try {
        Splitter splitter = new Splitter();
        return splitter.split(getPDDocument()).stream().map(function).collect(Collectors.toList());
    } catch (IOException e) {
        throw new RuntimeException("Document could not be split", e);
    }
}

public List splittopage(函数传入一个
函数
,该函数从拆分器中取出内容,并将其转换为所需类型:

 public <T> List<T> splitToPages(Function<? super WhateverSplitterReturns, ? extends T> function) {
    try {
        Splitter splitter = new Splitter();
        return splitter.split(getPDDocument()).stream().map(function).collect(Collectors.toList());
    } catch (IOException e) {
        throw new RuntimeException("Document could not be split", e);
    }
}

public List splittopage(函数)您能多花一分钟解释一下为什么我们需要使用super吗here@ArtjomProzorov实际上,它只是使API更加灵活。它只是意味着“一个可以接受
什么样的VersplitterReturns
的函数,即使它也接受更一般的类型”。请参阅,或有效Java中的项目“使用有界通配符提高API灵活性”(第3版中的项目31),或Java教程中的项目。谢谢大家。您能多花一分钟解释一下我们为什么需要使用super吗here@ArtjomProzorov你不知道,它只是让API更灵活,它只是意味着“一个可以接受
WhateverSplitterReturns
,即使它也接受更一般的类型的函数”。请参阅,或有效Java中的项目“使用有界通配符增加API灵活性”(第3版中的项目31),或Java教程中的项目。非常感谢