2010-06-17 10 views
7

Perché pubblico InputStream getResourceAsStream (nome stringa) è nella classe Class? Fornisce solo l'input del file che si trova nel file jar e non vi è alcuna relazione con la classe Class. quindi può essere un metodo statico e può essere di qualsiasi classe.Perché il metodo getResourceAsStream è in classe Class?

risposta

9

Ci è una relazione alla classe:

  • Il pacchetto della classe viene presa in considerazione - se si dà chiamata getResourceAsStream("baz.txt") sulla classe per foo.bar.SomeClass cercherà /foo/bar/baz.txt
  • Il classloader viene preso in considerazione per trovare le risorse in primo luogo - se fosse un metodo statico, come saprebbe quali file jar (etc) cercare? C'è di più alla vita che il programma di caricamento classe sistema di
1

E basta dare inputstream di lima che è in file jar ...

errato. Non tutti i classloader caricano le risorse dal normale file JAR.

  • Alcuni programmi di caricamento classe caricano da directory.
  • Alcuni programmi di caricamento classe caricano dalla rete.
  • Alcuni programmi di caricamento classe caricano da più origini.

Tutto di questa complessità è nascosta da voi quando si utilizza l'API ClassLoader via Class in questo caso.

... e non vi è alcuna relazione con classe Classe.

errato. Vedi @Jon Skeet's answer. Nota che chiamare Class.getResourceAsStream(String) fornisce una risorsa che appartiene allo stesso contesto di sicurezza della classe. Questo può essere molto importante se ci sono più contesti di classe/sicurezza in uso.

Problemi correlati