Motivo per un errore di riflessione

3

Sto lavorando a un progetto plug-in di Eclipse.

Utilizzando questo plug-in, gli utenti possono creare progetti Java Eclipse con alcune specificità. Ad esempio, possono aggiungere nomi di classi Java che verranno salvati in un file. Queste classi Java possono essere create su src del progetto o utilizzate da un file jar che deve essere aggiunto al classpath del progetto. In questo caso, il plug-in utilizzerà la reflection per ottenere alcuni dati da ciascuna classe.

Esistono due casi di test diversi che danno lo stesso errore perché il plug-in non riesce a trovare la classe da istanziare:

  • Un jar contiene una classe con un nome salvato nel file non aggiunto al classpath del progetto. Quindi in questo caso il classpath è incompleto.

  • L'utente del plug-in ha aggiornato un jar in cui la sua vecchia versione del jar conteneva la classe denominata, ma la nuova versione di jar non lo fa (cosa che potrebbe accadere se la classe fosse cancellata dalla nuova versione di il vaso). In questo caso, il plug-in non troverà la classe ma il classpath è completo.

Quindi il plug-in deve distinguere tra i due casi di test quando non riesce a trovare il nome della classe usando reflection.

Come si può fare?

    
posta ali 30.09.2013 - 17:31
fonte

2 risposte

1

L'unico modo che vedo per te per ottenere questo è forzare l'utente a dichiarare tra il nome della classe se la classe fa parte del progetto o parte del classpath e usa quella informazione per dare l'errore se la riflessione non riesce trova la classe.

Non credo che ci sia un altro modo per farlo poiché il progetto stesso farà parte del "classpath" e il classloader considera ogni classe come uguale

    
risposta data 14.01.2014 - 18:24
fonte
0

Non vedo alcuna differenza pratica tra i due. In entrambi i casi, la classe che stai cercando non è sul classpath.

Forse, la risposta è cercare tutte le unità disponibili sulla macchina per ogni file .class o .jar. Ispeziona tutti i file trovati per vedere quali classi sono contenute all'interno. Se la classe mancante è presente, il classpath è incompleto. Altrimenti la classe non esiste.

Questo non suona molto realistico, però.

    
risposta data 01.10.2013 - 17:52
fonte

Leggi altre domande sui tag