【发布时间】:2023-03-21 05:29:01
【问题描述】:
我得到了代码审查评论,下面一行可以返回NPE
this.getClass().getClassLoader().getResource("").getPath()
当我提到自我课程时,我有没有机会得到NPE?
我找到了this answer,它说如果我加载外部文件,那么就有NPE 的可能性,对吗?
【问题讨论】:
-
getResource("") -> 不确定,但我想可以。
-
你能回答一下为什么吗?我该如何克服它?对我很有好处。
-
你可以添加一个简单的空检查
-
术语“资源(名称)”受类加载器实现的约束。在默认系统类加载器和
URLClassLoader下,当加载器的搜索路径未指定或不包含任何目录条目时,getResource("")实际上将返回null。其他一些加载器可能更愿意无条件返回null或将特殊语义附加到空资源名称或其他任何内容。 -
最好的机会是使用
System.getProperty("java.class.path"),或者,如果适用(JDK ((URLClassLoader) ClassLoader.getSystemClassLoader()).getURLs()。但在一般情况下,永远不能 100% 保证它不会返回null,因为它最终取决于启动 JVM 的内容/方式。
标签: java classloader absolute-path file-location