Kor*_*gay 6 java intellij-idea
这是我的代码:
private void foo(Bar bar) {
Session session = null;
Class entityClazz = null;
try {
entityClazz = Hibernate.getClass(bar);
if (bar != null) {
Run Code Online (Sandbox Code Playgroud)
并且IntelliJ将通过以下消息警告我上面的最后一个声明:
条件'bar!= null'始终为'true'.此检查分析方法控制和数据流,以报告始终为真或假的可能条件,静态证明其值为常量的表达式,以及可能导致违约性合同违规的情况.
当我删除声明时:
entityClazz = Hibernate.getClass(bar);
Run Code Online (Sandbox Code Playgroud)
警告将消失.
这里IntelliJ的想法是什么,什么阻止bar为null?
根据 hibernate 文档,这就是 org.hibernate.Hibernate 类中的 getClass() 方法的作用。
public static Class getClass(Object proxy) {
if ( proxy instanceof HibernateProxy ) {
return ( ( HibernateProxy ) proxy ).getHibernateLazyInitializer()
.getImplementation()
.getClass();
}
else {
return proxy.getClass();
}
}
Run Code Online (Sandbox Code Playgroud)
根据文档,HibernateException如果参数为 null,则会抛出该参数,该参数NestableRuntimeException也是RuntimeException.
Intellij 能够对此进行分析,使用其代码检查很容易发现 loc
entityClazz = Hibernate.getClass(bar);
Run Code Online (Sandbox Code Playgroud)
会抛出一个 NPE。如果它抛出 NPE,则永远不会达到 if 条件语句,因为 NestableRuntimeException 是未经检查的异常。
您可以将 if 条件放在 Hibernate.getClass(bar) 之上,这对于 null 安全方法来说是理想的选择。
希望这一切能够澄清。
参考
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |