【问题标题】:Java - Class ChainingJava - 类链接
【发布时间】:2019-12-06 19:30:05
【问题描述】:

假设您有以下具有静态定义方法的类。

  • kubeUtils
    • KubeUtils
    • controllers
      • ConfigMapUtils
      • DeploymentUtils
      • ...
    • objects
      • PodUtils
      • 命名空间实用程序
      • ....

每个类都有一些方法,例如

public static void waitUntilServiceIsPresent(String serviceName){
  // implementation...
}

public static void waitUntilServiceDeletion(String serviceName){
  // implementation...
}

public static void waitUntilServiceIsUpdated(String serviceName){
  // implementation...
}

and so on...

所以在用户视图中我们需要这样称呼它:ServiceUtils.waitUntilServiceIsPresent(serviceName);

我需要的语法糖将使用类链接,但我不知道我怎么可能做到这一点。示例:

KubeUtils.ServiceUtils.waitUntilServiceIsPresent(serviceName)

or 

KubeUtils.getServiceUtils.waitUntilServicePresent(serviceName)

请记住,我在这些类中只有静态方法,我不想使用组合。我的目标是在不创建对象的情况下使用这些方法。希望,我的解释很清楚。

【问题讨论】:

  • 不清楚,说实话。
  • 有聚合吗?这意味着,例如,KubeUtils 是否具有类类型 ServiceUtils 的属性?
  • 我不知道你为什么决定使用静态方法。大量的静态方法通常是一个糟糕的设计。 ServiceMonitorServiceWatcher 将是比 ServiceUtils 提供更多信息的名称。

标签: java chaining


【解决方案1】:

我会继续说我不认为这是一个好的做法,但作为一个练习:你可以通过拥有内部类来实现这一点:

public class KubeUtils {
    public static class ServiceUtils {
        public static void waitUntilServiceIsPresent(String serviceName){
            ...
        }
    }
}

调用:

KubeUtils.ServiceUtils.waitUtilServiceIsPresent(...);

为了更好的实践,我可能会使用包结构来构造你的实用程序类,如下所示:

com.domain.project
├── kube
│   ├── ServiceUtil
│   └── FooUtil
└── bar
    └── BazUtil

【讨论】:

  • 目前我在结构和类中组织得很好,但第二种方法无法解决。调用ServiceUtil.someMethod()BazUtil.someMethod() 将是相同的。它只是结构化的。对吗?
猜你喜欢
  • 1970-01-01
  • 2012-05-28
  • 2014-06-17
  • 1970-01-01
  • 2019-04-27
  • 2013-07-27
  • 2019-04-11
  • 2013-01-13
  • 1970-01-01
相关资源
最近更新 更多