栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java“不兼容的类型:void无法转换为...”是什么意思?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java“不兼容的类型:void无法转换为...”是什么意思?

快速回答

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

解:

  1. 阅读你要尝试调用的方法的javadoc(如果没有javadocs,请阅读源代码)。
  2. 从javadocs /源代码中,应该如何使用该方法。
  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。问题的根本原因不一定在该行,但毕竟是在编译器已经想通了,什么是错的。
  • 这是类型错误-因此是“不兼容的类型”短语。
  • 不兼容涉及两种类型: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无法分配给…”错误消息的真正含义。编译器告诉我们代码正在尝试使用已声明为不返回任何结果的方法的结果。那不可能 Java语言不允许你“空想”地使用值。

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

我们可以更改方法的声明,以便它确实返回一个值。例如:

private static int add(int a, int b) {    int res = a + b;    return res;}

我们可以更改呼叫站点,以便它不会尝试使用(不存在的)返回值。例如:

add(1, 1);

在此示例中,两种方法都可以做到这一点。但是只有一种方法(第一种方法)可使代码按预期工作。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/382712.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号