是否可以从静态 util 调用不同的实例

Is it possible to call diffrent instances from static util

更新:我用更多细节重写了我的问题。

Class 磁盘是第三方的,初始化时间很长,所以我想只创建一次作为静态成员。因为我无法更改它,所以我想用我自己的逻辑将其包装为实用程序 class.

假设我已经创建了实用程序:

class DiskUtilC {
   static Disk disk = new Disk("c:\");
   
   List static searchFile(String name) {
       return soSomething(disk.search(name)); 
   }

   ...many more static methods ...
}
class DiskUtilD {
   static Disk disk = new Disk("d:\");
   
   List static searchFile(String name) {
       return soSomething(disk.search(name)); 
   }
   
   ...many more static methods ...
}

由于两个 class 使用相同的静态方法,我想将它们全部移动到一个公共位置但保持相同的用法,即

DiskUtilC.searchFile("xxx"); 
DiskUtilD.searchFile("xxx");

无法将多态与静态一起使用我不确定是否可能。

我知道我总是可以做这样的事情 DiskUtil.getInstance("c").searchFile("xxx") 但它太麻烦了。有没有办法像我上面演示的那样做到这一点?

定义两个具有相同代码和不同静态字段的 classes DiskUtilC 和 DiskUtilD 没有任何好处 - 一个可能与另一个编辑不一致。

如果 C+D 驱动器的处理逻辑相同(即它们不需要不同的 soSomething 实现),您可以为 C 和 D 声明一个带有 2 个静态字段的 DiskUtil class驱动器和实例方法,例如 getName / searchFile。示例:

class DiskUtil {
   static final DiskUtil C = new DiskUtil("c:\");
   static final DiskUtil D = new DiskUtil("d:\");
   
   private final Disk disk;
   private DiskUtil(String root) {
       disk = new Disk(root)
   }
   
   void getName() {
       return disk.name();   
   }

   List searchFile(String name) {
    return soSomething(disk.search(name)); 
   }
   
   ...many more... (not-static methods)
}

然后通过DiskUtil使用:

DiskUtil.C.searchFile("xxx"); 
DiskUtil.D.searchFile("xxx");

但是使用 DiskUtil.getInstance("c") 或类似的方法可能更好,这样您就可以 getInstance 根据需要在首次使用时根据需要初始化任何驱动器,而不是仅使用硬接线 C/D。按需加载的示例还可以设置说 C() 以简化输入:

private static final ConcurrentHashMap<String,DiskUtil> DISKS = new ConcurrentHashMap<>();
private static DiskUtil getInstance(String drive) {
    return DISKS.computeIfAbsent(drive.toLowerCase(), letter -> new DiskUtil(letter+":\"));
}
// Handy access to C:
static DiskUtil C() { return getInstance("C"); }