Comment une classe anonyme peut-elle implémenter deux interfaces (ou plus) ? Alternativement, comment peut-elle les deux étendre une classe et implémenter une interface ? Par exemple, je veux créer un objet de classe anonyme qui étend deux interfaces :
// 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;
}
}
};
Je peux ensuite l'utiliser dans un bloc try-with-resources comme suit AutoCloseable
comme classe utilitaire initialisée paresseusement :
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
Je ne veux pas créer une classe interne parce que je suis absolument sûr que cette classe ne sera pas utilisée ailleurs que dans la méthode dans laquelle j'ai besoin de l'utiliser (et j'ai aussi pourrait voulez utiliser les variables locales déclarées dans cette méthode qui pourraient être de var
type).