java不能对什么类型进行转换_关于java:“不兼容类型:void无法转换为…”是什么意思?...

本文详细解释了Java编译错误`void cannot be converted to...`的含义,指出该错误通常发生在尝试使用不返回值的方法的结果时。解决方案包括检查方法的javadoc或源代码,确保正确使用方法,或者修改方法以返回所需类型的值。通过示例代码,展示了如何修正此类错误,帮助新手程序员理解Java中类型匹配的重要性。
摘要由CSDN通过智能技术生成

Java编译消息是什么:

"Incompatible types: void cannot be converted to ..."

的意思,以及我该如何解决。 一些编译器使用不同的措词; 例如

"Type mismatch: cannot convert from void to ..."

要么

"Incompatible types. Required: ... Found: void

(这旨在对涉及" void"的非常具体的编译错误消息进行规范的问答,该错误消息会使新的Java程序员感到困惑。它的目的并非是关于Java中可能遇到的各种"类型转换"问题的教程。 )

快速回答

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

解:

阅读您要尝试调用的方法的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方法采用两个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);

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值