如何处理“最终字段可能未初始化”的问题与多个静态变量?
问题描述:
在这段代码中,如果我将'final'添加到变量定义中,我将收到“最终字段可能未被初始化”的错误。一些关于Statckoverflow的建议解决方案倾向于创建静态函数来返回值。但是,在这种情况下,我需要创建四个不同的功能来实现这一点。这个问题有没有更优雅的解决方案?如何处理“最终字段可能未初始化”的问题与多个静态变量?
private static String MODEL_PATH;
private static String VECTORS_PATH;
private static String NEG_PATH;
private static String POS_PATH;
static {
try {
MODEL_PATH = new ClassPathResource("models/word2vec_model").getFile().getAbsolutePath();
VECTORS_PATH = new ClassPathResource("models/model.zip").getFile().getAbsolutePath();
NEG_PATH = new ClassPathResource("models/neg.txt").getFile().getAbsolutePath();
POS_PATH = new ClassPathResource("models/pos.txt").getFile().getAbsolutePath();
} catch (Exception e) {
e.printStackTrace();
}
}
答
然而,在这种情况下,我需要创建四种不同的功能来做到这一点。
因为你基本上是做同样的事情,但具有不同的资源名称,一个方法就足够了:
private static String getResourceByName(string path) {
try {
return ClassPathResource(path).getFile().getAbsolutePath();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
现在,您可以用同样的方法四次在初始化:
private static final String MODEL_PATH = getResourceByName("models/word2vec_model");
private static final String VECTORS_PATH = getResourceByName("models/model.zip");
private static final String NEG_PATH = getResourceByName("models/neg.txt");
private static final String POS_PATH = getResourceByName("models/pos.txt");