我使用的IntelliJ IDEA,以及後續的代碼生成一個警告:如果我標誌着testObj瞬態「Expression testObj might evaluate to null but is returned by the method declared as @NotNull (at line 16)
」Java的transient關鍵字和空
package com.dlp;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class TestCase {
@Nullable
private transient Object testObj = null;
@Nonnull
public Object getTestObj() {
if(testObj == null) {
testObj = new Object();
}
return testObj; //Line 16
}
}
這只是發生。刪除關鍵字將清除警告。我沒有獲得暫態和可空性之間的一些交互,或者這只是IDEA中的一個錯誤?
唯一的事情就是顯而易見 - 如果一個可序列化的實例被反序列化,它將爲空,除非它被處理了。 – jdphenix 2015-02-12 04:26:26
@ jdphenix但是該方法已經檢查了這種情況。雖然如果這個對象被反序列化,那麼testObj將是空的,但這同樣適用於默認初始化爲空的非瞬態字段。我已經將該字段標記爲@Nullable。該領域如何變爲空值不應該成爲一個問題。 什麼奇怪的是,IDEA認爲testObj可以爲空_immediately after_檢查它不是。 – RandomBK 2015-02-12 04:33:41
確實 - 我懷疑是bug。 – jdphenix 2015-02-12 04:36:31