gpt4 book ai didi

java - "Incompatible types: void cannot be converted to ..."是什么意思?

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:04:37 30 4
gpt4 key购买 nike

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 ..."

(这是针对一些涉及“void”的非常具体的编译错误消息的规范问答,这些错误消息往往会使新的 Java 程序员感到困惑。它不是关于各种不同“类型转换”的教程在 Java 中可能遇到的问题。)

最佳答案

快速回答

编译器告诉您,您的代码正在尝试使用不返回结果的方法的“结果”。

解决方案:

  1. 阅读您尝试调用的方法的 javadoc(如果您没有 javadoc,则阅读源代码)。

  2. 从 javadoc(或源代码)中找出应该如何使用该方法。

  3. 将您的代码更正为使用(不存在的)结果,或者使用不同的方法。或者,如果调用的是您的方法之一,则另一种可能的更正可能是更改方法以返回适当的值。

详细示例

考虑这个例子:

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 方法中指定行的指定位置存在问题。问题的根本原因不一定在那一行,而是编译器发现某事错误的地方。

  • 这是一个类型错误 - 因此是“不兼容的类型”短语。

  • 不兼容涉及两种类型:voidint

  • 编译器认为代码需要从voidint 的转换...而这是不可能的。


那么这个void类型是什么?

嗯,您很可能已经了解到 Java 支持两种类型:原始类型和引用类型。 void 类型不是其中任何一个。它是“类型”,意思是“没有值(value)”。 (如果您将类型视为值集,那么 void 就是空集。)

void 类型的主要用途是在方法声明中。看上面add方法的声明。请注意,我们已经声明了带有签名的 add:

private static void add(int a, int b)

该签名指出 add 方法采用两个 int 方法,并返回 void。这意味着该方法将不返回任何内容。

然而......我们这样调用它:

int sum = add(1, 1);

这期望 add 调用返回一个 int 值,我们将分配给 sum

这就是 “void cannot be assigned to ...” 错误消息的意思真的。编译器告诉我们代码正在尝试使用已声明不返回任何结果的方法的结果。那是不可能的。 Java 语言不允许您“从空中提取一个值”来使用。


可能有两种方法可以消除编译错误:

  1. 我们可以更改方法的声明,使其返回一个值。例如:

    private static int add(int a, int b) {
    int res = a + b;
    return res;
    }
  2. 我们可以更改调用站点,使其不会尝试使用(不存在的)返回值。例如:

    add(1, 1);

在这个例子中,任何一种方法都可以做到这一点。但只有一种方法(第一种)能让代码按预期工作。

关于java - "Incompatible types: void cannot be converted to ..."是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42369301/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com