Почему метод getResourceAsStream находится в классе Class? - PullRequest
7 голосов
/ 17 июня 2010

Почему public InputStream getResourceAsStream (String name) находится в классе Class? Он просто дает входной поток файла, который находится в jar-файле и не имеет отношения к классу Class. так что это может быть статический метод, и он может быть в любом классе.

Ответы [ 2 ]

10 голосов
/ 17 июня 2010

Там есть отношение к классу:

  • Пакет класса учитывается - если вы позвоните getResourceAsStream("baz.txt") на класс для foo.bar.SomeClass, он будет искать /foo/bar/baz.txt
  • Первоначально учитывается загрузчик классов - если бы это был статический метод, как бы он узнал, какие файлы jar (и т. Д.) Искать? В жизни есть нечто большее, чем системный загрузчик классов
1 голос
/ 17 июня 2010

Это просто дает входной поток файла, который находится в jar-файле ...

Неверно.Не все загрузчики классов загружают ресурсы из обычного файла JAR.

  • Некоторые загрузчики классов загружаются из каталогов.
  • Некоторые загрузчики классов загружаются из сети.
  • Некоторые загрузчики классов загружаются из нескольких источников.

Вся эта сложность скрыта от вас, когда в этом случае вы используете ClassLoader API через Class.

... и нетсвязь с классом.

Неверно.Смотрите ответ @Jon Skeet.Обратите внимание, что вызов Class.getResourceAsStream(String) дает ресурс, который принадлежит тому же контексту безопасности, что и класс.Это может быть очень важно, если используется несколько загрузчиков классов / контекстов безопасности.

...