HDFS 有没有办法在静态块中实现条件语句

9ceoxa92  于 2022-12-09  发布在  HDFS
关注(0)|答案(1)|浏览(198)

我有一个类HDFSHbaseInstance,它将在static block中加载Hbase配置

public class HDFSHbaseInstance {
    private static FileSystem hadoopFS = null;
    private static Configuration config = null;
    static {
        try {
            config = HBaseConfiguration.create(new Configuration());
            config.set("hbase.zookeeper.quorum", "10.21.1.111");
            config.set("hbase.zookeeper.property.clientPort", "1234");

            hadoopFS = FileSystem.get(config);
        }
        catch (IOException e) {
            ...
        }
    }
// remaining code
}

现在由于某些原因,我必须再创建一个类HDFSInstance,它将加载Hadoop的默认配置

public class HDFSInstance {
    private static FileSystem hadoopFS = null;
    private static Configuration config = null;
    static {
        try {
            config = new Configuration();
            hadoopFS = FileSystem.get(config);
        }
        catch (IOException e) {
            ...
        }
    }
// remaining code which is same as upper class
}

问题就在这里,我有一个类,它会根据一些条件决定使用任何高于类的对象。我只是通过conditional statement来做这件事,比如

public class A{
    main(){
        if (defaultConf) { HDFSInstance.callFun(); }
        if (hbaseConf) { HDFSHbaseInstance.callFun(); }
    }
}

问题

1.有没有办法通过在static block中添加conditional statement,将HDFSInstanceHDFSHbaseInstance合并为一个?
1.我想到了static constructor,但它在我现在的场景中不起作用,那么有没有不创建constructor的解决方案?

ccrfmcuu

ccrfmcuu1#

这将是一个非常糟糕的设计。至少将您的静态块移动为一个静态方法,并在您的检查标志中调用适当的方法。但实际上您应该使用工厂模式,并根据您的标志值获取适当的类。我刚刚详细回答了类似的问题。请参阅我对这个问题的回答:如何使用自定义ClassLoader从Java库中获取不同的新对象

相关问题