Java编译消息是什么:
_DEBUG
意思是,我该如何修复它。有些编译器使用不同的措辞; e.g。
"Incompatible types: void cannot be converted to ..."
(这是一个规范的Q& A,用于非常具体的编译错误消息,涉及" void"这会混淆新的Java程序员。它不打算成为各种不同的教程&# 34;类型转换" Java中可能遇到的问题。)
答案 0 :(得分:5)
编译器告诉您正在尝试使用"结果"一种没有返回结果的方法。
<强>解决方案:强>
阅读您尝试调用的方法的javadoc(如果您没有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
方法的指示行上的指示位置检测到问题。问题的根本原因不一定就在那条线上,但这就是编译器已经发现某些东西错误的地方。
这是一种类型错误 - 因此&#34;不兼容的类型&#34;短语。
void
和int
。void
转换为int
......这是不可能的。void
类型是什么?那么,您很可能已经了解到Java支持两种类型:基本类型和引用类型。 void
类型不是这些中的任何一个。这是&#34;类型&#34;这意味着&#34;没有价值&#34;。 (如果您将类型视为值集,则void
为空集。)
void
类型的主要用途是在方法声明中。查看上面add
方法的声明。请注意,我们已使用签名声明add
:
private static void add(int a, int b)
该签名表明add
方法需要两个int
方法,并返回void
。这意味着该方法不会返回任何内容。
然而......我们这样称呼它:
int sum = add(1, 1);
预计add
调用会返回int
值,我们将分配给sum
。
这是&#34; void无法分配给...&#34; 错误消息真正的意思。编译器告诉我们代码正在尝试使用已声明不返回结果的方法的结果。这是不可能的。 Java语言不允许你从空中汲取价值。使用。
有两种方法可以消除编译错误:
我们可以更改方法的声明,以便它返回一个值。例如:
private static int add(int a, int b) {
int res = a + b;
return res;
}
我们可以更改呼叫站点,以便它不会尝试使用(不存在的)返回值。例如:
add(1, 1);
在这个例子中,任何一种方法都可以。但只有一种方法(第一种方法)使代码按预期工作。