我的用例是能够创建FileOutputStream而无需创建文件。
所以我创建了这个基于番石榴的OutputStream:
public class LazyInitOutputStream extends OutputStream {
private final Supplier<OutputStream> lazyInitOutputStreamSupplier;
public LazyInitOutputStream(Supplier<OutputStream> outputStreamSupplier) {
this.lazyInitOutputStreamSupplier = Suppliers.memoize(outputStreamSupplier);
}
@Override
public void write(int b) throws IOException {
lazyInitOutputStreamSupplier.get().write(b);
}
@Override
public void write(byte b[]) throws IOException {
lazyInitOutputStreamSupplier.get().write(b);
}
@Override
public void write(byte b[], int off, int len) throws IOException {
lazyInitOutputStreamSupplier.get().write(b,off,len);
}
public static LazyInitOutputStream lazyFileOutputStream(final File file) {
return lazyFileOutputStream(file,false);
}
public static LazyInitOutputStream lazyFileOutputStream(final File file,final boolean append) {
return new LazyInitOutputStream(new Supplier<OutputStream>() {
@Override
public OutputStream get() {
try {
return new FileOutputStream(file,append);
} catch (FileNotFoundException e) {
throw Throwables.propagate(e);
}
}
});
}
}
效果很好,但是我看到可以使用
InputSupplier/OutputSupplier
接口...除非它们不扩展Supplier,所以我不能使用此处需要的备注功能,因为我不希望OutputSupplier
表现得像工厂。此外,还有
Files
api:public static OutputSupplier<FileOutputStream> newOutputStreamSupplier(File file,
boolean append)
有没有一种方法可以使用OutputSupplier,它会比当前代码更优雅?
为什么OutputSupplier无法实现Supplier?
最佳答案
InputSupplier
可以引发IOException
,而Supplier
不能。
关于java - 为什么Guava InputSupplier/OutputSupplier不扩展Supplier接口(interface)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18868920/