2017-01-28 80 views
-3

而不是隱式轉換,有沒有辦法在變量類型不匹配時強制java編譯器發出錯誤。例如:如何使Java編譯器強制顯式類型轉換

int intValue=3; 
double dblValue = 2.2; 
double result; 
result = 1/intValue*(intValue-dblValue); 

在上述的Java的實例將隱式轉換(1 /的intValue)與值整數0

我想是爲編譯器發出一個錯誤,當變量類型唐不匹配而不是隱式轉換。

在此先感謝

編輯1:上面的公式只是一個例子。我知道如何使用以下解決方案中的任一個來解決這個問題:

result = 1.0/intValue*(intValue-dblValue); 

result = 1/(double)intValue*((double)intValue-dblValue); 

但那不是我後。謝謝

編輯2:我指的是類型轉換而不是類型轉換。我正在尋找編譯器來強制顯式類型轉換。

我正在尋找這樣的事情: https://support.microsoft.com/en-us/help/311329/option-explicit-and-option-strict-in-visual-basic-.net-and-in-visual-basic

+1

嗯,這是完全合法的Java代碼,所以在這種情況下沒有理由讓它產生錯誤。 –

+5

「隱式將cast(1/intValue)類型轉換爲值爲0的整數」 - 什麼?這裏沒有涉及到任何投射。它不會產生一個double,然後將其轉換爲int或類似的東西;除法運算符直接產生一個int。 – user2357112

+0

否.Java的規則已經定義好了,你提到的構造不是錯誤。它甚至不是一個類型轉換。在涉及整數和雙精度的情況下,這是一種隱含的轉換,在僅涉及整數的情況下完全不變。不清楚你在問什麼。 – EJP

回答

1

怎麼樣,而不是將兩個整數,你把一張雙人牀和一個整數?

result = 1.0/intValue*(intValue-dblValue); 
+0

是的,我知道,但那不是我要求的 – CPSProgrammer

+0

但它是你要求的答案。 –

0

「不是隱式類型轉換,有沒有辦法在變量類型不匹配時強制java編譯器發出錯誤。」當類型不匹配時它會發出錯誤,否則會丟失信息。正如在上面的評論中指出的,在你的例子中,沒有任何「類型轉換」,或縮小轉換爲具體的。編譯器正在做它應該做的事情,不,你不能改變它。

「我想要的是編譯器......」不幸的是,你想要什麼不被編譯器考慮。它只會執行Java語言規範和兼容性要求所規定的符合Java語言的規定。

在你的情況下,你指定了一個完全合法的int操作,既不需要擴展也不縮小轉換,所以即使編譯器確實在乎你想要什麼,也沒有什麼可以抱怨的。

你可以使用像Findbugs和CheckStyle這樣的lint工具來預處理源代碼中的各種bug風險,甚至自定義規則。他們可能會檢測到程序員錯誤地忽略關聯性或在混合類型表達式中輸入風險的用例。他們是優秀的工具;去看一下。

+0

@GrzegorzGórkiewicz我在評論後更新了帖子 – CPSProgrammer

相關問題