2010-06-17 1 views
7

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

ответ

9

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

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

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

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

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

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

... и нет отношения с классом класса.

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