我可以使用其他类的静态方法吗?

用户名

以下是我的CuratorClient班级,它已连接到Zookeeper并同时开始了领导者选举过程。

public class CuratorClient {

    // can I make this as static?
    private static CuratorFramework client;
    private String latchPath;
    private String id;
    private LeaderLatch leaderLatch;

    public CuratorClient(String connString, String latchPath, String id) {
        client = CuratorFrameworkFactory.newClient(connString, new ExponentialBackoffRetry(1000, Integer.MAX_VALUE));
        this.id = id;
        this.latchPath = latchPath;
    }

    public void start() throws Exception {
        client.start();
        client.getCuratorClient().blockUntilConnectedOrTimedOut();
        leaderLatch = new LeaderLatch(client, latchPath, id);
        leaderLatch.start();
    }

    public boolean isLeader() {
        return leaderLatch.hasLeadership();
    }

    public Participant currentLeader() throws Exception {
        return leaderLatch.getLeader();
    }

    public void close() throws IOException {
        leaderLatch.close();
        client.close();
    }

    // can I use below method from any other class ?
    protected static List<String> getChildren(String node) throws Exception {
        return client.getChildren().forPath(node);
    }
}

当我的服务启动时,在静态块中,我正在使用CuratorClient与Zookeeper建立连接,并同时启动了领导者选举过程。

public class TestService {

    private static CuratorClient curatorClient = null;
    static {

        try {
            String connectionString = "some-string";
            String hostname = "machineA";

            curatorClient = new CuratorClient(connectionString, "/my/latch", hostname);
            curatorClient.start();

        } catch (Exception ex) {
            // log exception
        }
    }

    ....
    ....

    // some method
    public Map<String, String> installNewSoftware(String node) {

    //.. some other code
    try {
        List<String> children = CuratorClient.getChildren("/my/example");
        System.out.println(children);

    } catch (Exception e) {
        e.printStackTrace();
    }

    //.. some other code
    return null;
    }
}

现在我还有其他一些类,喜欢使用此类getChildren方法,CuratorClient所以在这个类中,我可以像这样CuratorClient.getChildren("/my/example");正确地直接使用吗?

public class DifferentClass {

    ....
    ....

    // some new method
    public Map<String, String> installNewSoftware(String node) {
    try {
        List<String> children = CuratorClient.getChildren("/my/example");
        System.out.println(children);

    } catch (Exception e) {
        e.printStackTrace();
    }

    //.. some other code
    return null;
    }
}

通常,这不是策展人问题或动物园管理员问题。这基本上是一个设计问题,我试图了解我的操作方式是否会出现问题?而且我假设CuratorFramework也会是线程安全的吗?

杰罗恩·范内维尔

是的,您可以static从其他类中调用方法。

您的签名如下所示:

protected static List<String> getChildren(String node) throws Exception

之所以不能从另一个类中调用它,是因为它protected(对当前类和子类public可见)而不是(对任何地方都可见)。

如果使其可见,则可以使用进行调用CuratorClient.getChildren()

有关访问修饰符的更多信息
有关班级成员(static字段)的更多信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

我可以使用超类的类工厂静态方法创建子类实例吗?

来自分类Dev

我可以使用类助手来调用静态私有类方法吗?

来自分类Dev

我可以使用类助手来调用静态私有类方法吗?

来自分类Dev

我可以使用其他值扩展枚举吗?

来自分类Dev

我可以使用ONT上的其他端口吗?

来自分类Dev

我可以使用decltype()或其他方法通过指针获取实型吗?

来自分类Dev

我可以使用 DC/OS 中默认设置以外的其他登录方法吗

来自分类Dev

set方法可以使用其他类型的值吗?

来自分类Dev

我可以使用jquery / js将类添加到悬停的其他元素中吗

来自分类Dev

我可以使用其他帐户重新发布我的应用程序吗?

来自分类Dev

我可以使用其他版本的Tensorflow减小我的Heroku子弹尺寸吗

来自分类Dev

我可以使用其他帐户重新发布我的应用程序吗?

来自分类Dev

我可以使用其他发行版的内核升级我的内核吗?

来自分类Dev

我可以使用其他PHP文件中的“使用”运算符吗?

来自分类Dev

我可以使用其他PHP文件中的“使用”运算符吗?

来自分类Dev

我可以使用chartkick的图表链接到其他URL吗?

来自分类Dev

我可以使用其他返回类型重载“新运算符”吗?

来自分类Dev

R:我可以使用Reduce(或其他高级功能)执行以下操作吗?

来自分类Dev

我可以使用Ubuntu软件中心以外的其他工具打开apt链接吗?

来自分类Dev

我可以使用其他函数的类型信息作为Python中的返回类型吗?

来自分类Dev

我可以使用Ubuntu软件中心以外的其他工具打开apt链接吗?

来自分类Dev

我可以使用任何其他工具访问Microsoft Outlook PST存档吗?

来自分类Dev

我可以使用FirebaseSimpleLogin身份验证为其他用户吗?

来自分类Dev

我们可以使用SPService JQuery访问其他网站集中的列表吗?

来自分类Dev

我可以使用其他返回类型重载“新运算符”吗?

来自分类Dev

我可以使用OEM密钥激活其他版本的Windows吗?

来自分类Dev

我可以使用443以外的其他端口进行SSL通信吗?

来自分类Dev

我可以使用具有相同引脚排列的其他BIOS芯片吗?

来自分类Dev

我可以使用SQL从其他Excel文件构建Excel数据表吗?

Related 相关文章

  1. 1

    我可以使用超类的类工厂静态方法创建子类实例吗?

  2. 2

    我可以使用类助手来调用静态私有类方法吗?

  3. 3

    我可以使用类助手来调用静态私有类方法吗?

  4. 4

    我可以使用其他值扩展枚举吗?

  5. 5

    我可以使用ONT上的其他端口吗?

  6. 6

    我可以使用decltype()或其他方法通过指针获取实型吗?

  7. 7

    我可以使用 DC/OS 中默认设置以外的其他登录方法吗

  8. 8

    set方法可以使用其他类型的值吗?

  9. 9

    我可以使用jquery / js将类添加到悬停的其他元素中吗

  10. 10

    我可以使用其他帐户重新发布我的应用程序吗?

  11. 11

    我可以使用其他版本的Tensorflow减小我的Heroku子弹尺寸吗

  12. 12

    我可以使用其他帐户重新发布我的应用程序吗?

  13. 13

    我可以使用其他发行版的内核升级我的内核吗?

  14. 14

    我可以使用其他PHP文件中的“使用”运算符吗?

  15. 15

    我可以使用其他PHP文件中的“使用”运算符吗?

  16. 16

    我可以使用chartkick的图表链接到其他URL吗?

  17. 17

    我可以使用其他返回类型重载“新运算符”吗?

  18. 18

    R:我可以使用Reduce(或其他高级功能)执行以下操作吗?

  19. 19

    我可以使用Ubuntu软件中心以外的其他工具打开apt链接吗?

  20. 20

    我可以使用其他函数的类型信息作为Python中的返回类型吗?

  21. 21

    我可以使用Ubuntu软件中心以外的其他工具打开apt链接吗?

  22. 22

    我可以使用任何其他工具访问Microsoft Outlook PST存档吗?

  23. 23

    我可以使用FirebaseSimpleLogin身份验证为其他用户吗?

  24. 24

    我们可以使用SPService JQuery访问其他网站集中的列表吗?

  25. 25

    我可以使用其他返回类型重载“新运算符”吗?

  26. 26

    我可以使用OEM密钥激活其他版本的Windows吗?

  27. 27

    我可以使用443以外的其他端口进行SSL通信吗?

  28. 28

    我可以使用具有相同引脚排列的其他BIOS芯片吗?

  29. 29

    我可以使用SQL从其他Excel文件构建Excel数据表吗?

热门标签

归档