快速回答
编译器告诉您正在尝试使用不返回结果的方法的“结果”。
解决办法:读取要调用的方法的javadoc(如果没有javadocs,则读取源代码)。
从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方法取2int方法和返回void..这意味着该方法将不返回任何内容。
但是.。我们这样称呼它:int sum = add(1, 1);
这是在期待add呼叫返回int我们将分配给sum.
这就是“无效不能分配给.”错误信息真的手段。编译器告诉我们,代码试图使用已声明为不返回结果的方法的结果。那是不可能的。Java语言不允许您“从空气中提取值”来使用。
可能有两种方法可以消除编译错误:我们可以更改该方法的声明,以便它确实返回一个值。例如:private static int add(int a, int b) {
int res = a + b;
return res;}
我们可以更改调用站点,这样它就不会尝试使用(不存在)返回值。例如:add(1, 1);
在本例中,这两种方法都可以做到这一点。但是只有一种方法(第一种)使代码工作。按原计划.