2017-10-05 3 views
1

In diesem Code, wenn ich 'final' zu den Variablendefinitionen hinzufügen, erhalte ich "die letzten Felder wurden möglicherweise nicht initialisiert" -Fehler. Einige vorgeschlagene Lösungen auf Statckoverflow neigen dazu, statische Funktionen zu erstellen, um den Wert zurückzugeben. In diesem Fall muss ich jedoch vier verschiedene Funktionen erstellen. Gibt es eine elegantere Lösung für dieses Problem?Wie behandelt man "Endfelder wurden möglicherweise nicht initialisiert" Problem mit mehreren statischen Variablen?

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(); 
    } 
} 

Antwort

1

jedoch in diesem Fall muss ich vier verschiedene Funktionen erstellen, das zu tun.

Da Sie im Wesentlichen das Gleiche tun, aber mit unterschiedlichen Ressourcennamen, würde ein Verfahren ausreichend sein:

private static String getResourceByName(string path) { 
    try { 
     return ClassPathResource(path).getFile().getAbsolutePath(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

Jetzt können Sie die gleiche Methode viermal in Ihrer Initialisierung verwenden:

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