什麼Java編譯消息:「錯誤:不兼容的類型:void不能轉換爲...」是什麼意思?
"Error: Incompatible types: void cannot be converted to ..."
平均值,我怎麼解決它。
(這是爲了對經常混淆新的Java程序員,而不是在各種不同的「類型轉換」,人們可以在Java中遇到的問題的教程非常具體的編譯錯誤信息的規範Q &一個。)
什麼Java編譯消息:「錯誤:不兼容的類型:void不能轉換爲...」是什麼意思?
"Error: Incompatible types: void cannot be converted to ..."
平均值,我怎麼解決它。
(這是爲了對經常混淆新的Java程序員,而不是在各種不同的「類型轉換」,人們可以在Java中遇到的問題的教程非常具體的編譯錯誤信息的規範Q &一個。)
考慮這個例子:
public class Test {
private static void add(int a, int b) {
int res = a + b;
}
public static void main(String[] args) {
int sum = add(1, 1);
}
}
當我編譯使用javac
(Java 8),我得到下面的編譯錯誤。
$ javac Test.java
Test.java:7: error: incompatible types: void cannot be converted to int
int sum = add(1, 1);
^
1 error
編譯錯誤實際上是告訴我們幾件事情:
編譯器已在對在main
方法指示線指示的位置檢測問題。問題的根本原因不一定就在那一行,但那是編譯器已經知道是錯誤的地方。
這是一個類型錯誤 - 因此是「不兼容類型」的短語。
void
和int
。void
轉換爲int
...並且這是不可能的。那麼,什麼是這個void
類型?那麼,你很可能已經知道Java支持兩種類型:基本類型和引用類型。 void
類型是而不是這些。這是「類型」,意思是「沒有價值」。 (如果您認爲類型是值集,則void
是空集。)
void
類型的主要用途是在方法聲明中使用。看看上面的add
方法的聲明。我們已經宣佈add
與簽名公告:
private static void add(int a, int b)
該簽名指出add
方法有兩個int
方法,並返回void
。這意味着該方法將不會返回任何內容。
但是...我們可以把它叫做是這樣的:
int sum = add(1, 1);
這是期待add
調用返回的int
值,我們將分配給sum
。
這就是「void can not be assigned to ...」錯誤消息確實是的意思。編譯器告訴我們,代碼嘗試使用已聲明的方法的結果不返回任何結果。這是不可能的。 Java語言不允許您「使用空值」來使用。
存在兩種可能的方式,使編譯錯誤消失:
我們可以改變方法的聲明,以便它返回一個值。例如:
private static int add(int a, int b) {
int res = a + b;
return res;
}
我們可以改變通話網站,使其不會嘗試喲使用(不存在)的返回值。例如:
add(1, 1);
在這個例子中,這兩種方法會做到這一點。但只有一種方法(第一種方法)使代碼按預期的工作。
不能'void'也是'...'?甚至遠遠超出'ClassCastException'消息? –
@ cricket_007'ClassCastException'?你有沒有想到在運行時會實際編譯並且會失敗,包括一個「void」方法? (我不知道你的意見是什麼意思) – Tom
@ cricket_007 - 1)我設計的這個問答是針對'void'的情況。 2)同樣,我不希望這是關於所有可能的「類型轉換」編譯錯誤和運行時錯誤的教程。 –