我有一个类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
,将HDFSInstance
和HDFSHbaseInstance
合并为一个?
1.我想到了static constructor
,但它在我现在的场景中不起作用,那么有没有不创建constructor
的解决方案?
1条答案
按热度按时间ccrfmcuu1#
这将是一个非常糟糕的设计。至少将您的静态块移动为一个静态方法,并在您的检查标志中调用适当的方法。但实际上您应该使用工厂模式,并根据您的标志值获取适当的类。我刚刚详细回答了类似的问题。请参阅我对这个问题的回答:如何使用自定义ClassLoader从Java库中获取不同的新对象