匿名类的多重继承

8 浏览
0 Comments

匿名类的多重继承

匿名类如何实现两个(或更多)接口?或者,如何既扩展一个类又实现一个接口?

例如,我想创建一个扩展两个接口的匿名类的对象:

// Java 10 使用 "var",因为我不知道如何指定其类型
var lazilyInitializedFileNameSupplier = (new Supplier implements AutoCloseable)() {
    private String generatedFileName;
    @Override
    public String get() { // 仅生成一次文件
        if (generatedFileName == null) {
          generatedFileName = generateFile();
        }
        return generatedFileName;
    }
    @Override
    public void close() throws Exception { // 清理
        if (generatedFileName != null) {
          // 如果生成了文件,则删除文件
          generatedFileName = null;
        }
    }
};

然后,我可以在使用try-with-resources块时将其作为`AutoCloseable`作为延迟初始化的实用类使用:

try (lazilyInitializedFileNameSupplier) {
    // 一些复杂的逻辑,可能会或可能不会调用创建文件的代码
    if (checkIfNeedToProcessFile()) {
        doSomething(lazilyInitializedFileNameSupplier.get());
    }
    if (checkIfStillNeedFile()) {
        doSomethingElse(lazilyInitializedFileNameSupplier.get());
    }
} 
// 现在我们可以确定,即使文件已生成,它也不存在了

我不想创建内部类,因为我非常确定这个类除了我需要使用它的方法之外不会在任何地方使用(我还可能想使用在该方法中声明的可能是`var`类型的局部变量)。

0