Как анонимный класс может реализовать два (или более) интерфейса? В качестве альтернативы, как он может одновременно расширять класс, и реализовывать интерфейс? Например, я хочу создать объект анонимного класса, который расширяет два интерфейса:
// 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;
}
}
};
Затем я могу использовать его в блоке try-with-resources как AutoCloseable
как лениво-инициализированный служебный класс:
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
).