2017-10-05 126 views
1

在这段代码中,如果我将'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(); 
    } 
} 

回答

1

然而,在这种情况下,我需要创建四种不同的功能来做到这一点。

因为你基本上是做同样的事情,但具有不同的资源名称,一个方法就足够了:

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");