2017-10-05 12 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");