我是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"));
}
}
任何帮助都是可取的。
答案 0 :(得分:0)
您不能使用将FileWriter
用作Consumer<Writer>
的方法,因为这样的使用者需要接受任何种类的Writer
,但是此方法仅接受FileWriter
或子类。
由于您在方法内部使用了FileWriter
,因此简单的答案是将其用作界限:
Consumer<FileWriter>
您可以使用下限使其更一般:
Consumer<? super FileWriter>