我有一個通用的方法,在特定的場景中返回一個布爾值。if子句和泛型方法返回布爾型
我的方法的方法簽名是例如
public <T> T get() { return Boolean.true;}
直到這裏,它工作正常,沒有編譯器錯誤。 雖然,當我嘗試,如果子句中使用相同的一個,像
if(get())
然後返回錯誤說
類型不匹配:不能從對象轉換爲Boolean
而且我懷疑這只是發生在日食。這是一個現有的代碼,我正在嘗試在我的工作區中進行編譯。
請幫忙。
更新:
本文介紹了目標類型推斷以及 - https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html
,並通過@Codebender下面解釋,推理的TargetType行之有效的鏈接/嵌套的方法,雖然它看起來像它不會對語言結構的工作一樣,如果爲,而等 我試着寫下面的方法 -
public void test(boolean val)
,並試圖調用它就像
test(get())
它工作正常。
解決方案:
最後,在這段代碼中,我最終加入明確的類型轉換一樣
if((Boolean)get())
,它爲我工作。
'get()'在這裏用作原始類型,因此它返回一個'Object'。一個「對象」不代表一個有效的條件。 – SomeJavaGuy
你能分享一下嗎?另外,爲什麼這種方法需要通用?你知道你正在返回一個布爾值,你的'if'語句將它視爲一個布爾值 - 爲什麼不把它定義爲這樣呢? – Mureinik
這個神奇的'get()'方法是如何工作的,它可以返回任何所需類型的值,而不必知道該類型是什麼?沒有(正確)擾亂編譯器的這種方法可以返回唯一的結果是'null'。 – Misha