匿名类如何实现两个(或多个)接口?或者说,它如何既扩展一个类又实现一个接口?例如,我想创建一个匿名类的对象,它同时扩展了两个接口:
// Java 10 "var" is used since I don't know how to specify its type
var lazilyInitializedFileNameSupplier = (new Supplier<String> implements AutoCloseable)() {
private String generatedFileName;
@Override
public String get() { // Generate file only once
if (generatedFileName == null) {
generatedFileName = generateFile();
}
return generatedFileName;
}
@Override
public void close() throws Exception { // Clean up
if (generatedFileName != null) {
// Delete the file if it was generated
generatedFileName = null;
}
}
};
然后我可以将其作为AutoCloseable
懒初始化实用程序类,在try-with-resources块中使用:
try (lazilyInitializedFileNameSupplier) {
// Some complex logic that might or might not
// invoke the code that creates the file
if (checkIfNeedToProcessFile()) {
doSomething(lazilyInitializedFileNameSupplier.get());
}
if (checkIfStillNeedFile()) {
doSomethingElse(lazilyInitializedFileNameSupplier.get());
}
}
// By now we are sure that even if the file was generated, it doesn't exist anymore
我不想创建内部类,因为我绝对确定这个类除了我需要使用的方法之外不会在任何地方使用(而且我可能还想使用在该方法中声明的局部变量,这些变量可能是var
类型)。