为什么getResourceAsStream方法在Class类中?

8
为什么public InputStream getResourceAsStream(String name)方法在Class类中?它只是提供了位于jar文件中的文件的输入流,并没有与Class类相关联。因此,它可以是静态方法,并且可以在任何类中。
2个回答

12

这个类有关系:

  • 考虑类的包 - 如果您对foo.bar.SomeClass类调用getResourceAsStream("baz.txt"),它将寻找/foo/bar/baz.txt
  • 类加载器首先被考虑以找到资源 - 如果这是一个静态方法,它怎么知道要在哪些jar文件(等等)中查找? 生活中不仅仅只有系统类加载器

2
它只提供了JAR文件中的文件的输入流...

不正确。并非所有类加载器都从常规JAR文件中加载资源。

  • 一些类加载器从目录中加载。
  • 一些类加载器从网络中加载。
  • 一些类加载器从多个来源加载。

当您在这种情况下使用ClassLoader API通过Class时,所有这些复杂性都对您隐藏。

...并且与Class类没有关系。

不正确。请参见@Jon Skeet的答案。请注意,调用Class.getResourceAsStream(String)会给出属于同一安全上下文的资源。如果使用了多个类加载器/安全上下文,则这可能非常重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接