java汇编消息是什么:
"Incompatible types: void cannot be converted to ..."
是指我该如何修复它。一些编译器使用不同的措辞。例如
"Type mismatch: cannot convert from void to ..."
或
"Incompatible types. Required: ... found: void"
或
"Incompatible types: Found void, required ..."
(这是针对某些非常具体的汇编错误消息的规范Q& a涉及" void"倾向于混淆新的Java程序员。它并不是打算对各种不同的教程进行教程;键入"在Java中可以遇到的问题"。)
快速答案
编译器告诉您您的代码正在尝试使用"结果"。一个不返回结果的方法。
解决方案:
-
阅读您要调用的方法(如果没有Javadocs)的Javadoc。
-
来自Javadocs(或源代码),确定应如何真正使用该方法。
-
更正您的代码不是使用(不存在的)结果,或使用其他方法。另外,如果这是您正在调用的方法之一,则另一种可能的更正可能是更改返回适当值的方法。
详细的示例
考虑此示例:
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
呼叫返回我们将分配给sum
的int
值。
这是'void不能分配给... 错误消息真正的含义。编译器告诉我们,代码正在尝试使用已声明的方法的结果,该方法已被声明返回不返回结果。那是不可能的。Java语言不允许您"从空中提取价值"。使用。
可能有两种使编译错误消失的方法:
我们可以更改该方法的声明,以便它确实返回值。例如:
private static int add(int a, int b) { int res = a + b; return res; }
我们可以更改呼叫站点,以免您尝试使用(不存在的)返回值。例如:
add(1, 1);
在此示例中,任何一种方法都可以这样做。但是只有一种方法(第一种)使代码按预期。