为什么这个消费者抱怨编译时间错误?

时间:2019-02-16 08:15:04

标签: java java-8 functional-java

我是java8的新手,我正在尝试编写模板方法设计模式,为此我正在使用Consumer,但我不知道我在哪里做错了。

    package org.java.series.ds.cleancode;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.function.Consumer;

public class Sample1 {
    public static void main(String[] args) throws Exception {
        OrderExporter exporter=new OrderExporter();
        Exporter exporter2=new Exporter();      
        exporter2.exportFiles("abc.csv", exporter::writeToCSV);

    }   

}

 class Exporter{    
    public  File exportFiles(String fileName,Consumer<Writer> consumer)throws Exception {
        File file=new File(fileName);
        try(FileWriter fileWriter=new FileWriter(file)){
            //writeContent(fileWriter);
            consumer.accept(fileWriter);
            return file;
        }catch (Exception e) {
            System.err.println(e);
            throw e;
        }
    }
}

class OrderExporter{
    public void writeToCSV(FileWriter fileWriter) throws IOException {
        fileWriter.write(String.format("%s,%d,%s", "kishan",29,"vns"));
    }
}

任何帮助都是可取的。

1 个答案:

答案 0 :(得分:0)

您不能使用将FileWriter用作Consumer<Writer>的方法,因为这样的使用者需要接受任何种类的Writer,但是此方法仅接受FileWriter或子类。

由于您在方法内部使用了FileWriter,因此简单的答案是将其用作界限:

Consumer<FileWriter>

您可以使用下限使其更一般:

Consumer<? super FileWriter>