java void 返回_关于java:Void方法不能返回void方法的值?
我不介意我不明白,但我想知道为什么会这样:
void something(String a) {
return hi();
}
void hi() {
return;
}
奇怪的是,hi()的返回类型void。 我在IDE中遇到语法错误:
Void methods cannot return a value
此外,代码不编译:
Exception in thread"main" java.lang.Error: Unresolved compilation problem:
Void methods cannot return a value
at Resources.setSystemProperties(Resources.java:33)
at Resources.main(Resources.java:49)
我希望这会发生:
hi() -> return nothing
return [nothing] -> hi() is nothing
所以最后,它什么都不返回,就像void方法一样。
为什么会出现这种情况? 当返回void方法的结果时,为什么代码不能编译?
答案:void方法无法返回值。 就如此容易。
并且a.notify()是void ...那么为什么我不能返回结果呢? 我有三个答案,但似乎没有人试图真正回答我的问题
return ;和return;之间存在差异。 我想这就是令你困惑的事情。
看看Scala,它有点像你在这里想做的那样。 Java没有。
@SotiriosDelimanolis我想OP对我上次评论感到困惑
这在JLS 14.17中定义:
A return statement with an Expression must be contained in one of the following, or a compile-time error occurs:
A method that is declared to return a value
A lambda expression
未声明void方法返回值,因此在这样的方法中不能发生带有表达式的return语句(如函数调用)。
此外,由于JLS 15.12.3中的此语言,您无法返回void方法的结果:
If the compile-time declaration is void, then the method invocation must be a top level expression (that is, the Expression in an expression statement or in the ForInit or ForUpdate part of a for statement), or a compile-time error occurs.
换句话说,因为a.notify()是void,你可以在它看起来像一个语句的上下文中使用它(即,所有单独在一行上),但不能在它看起来像表达式的上下文中使用它(即,你可以' t将其值赋给变量,返回它等。
我发誓,所有这些答案......这个实际上让我有点理解这种行为。 谢谢。
因为这就是语言的运作方式。您不能使用return关键字在返回类型为void的方法中返回值。 void不是可以传递的实际值:
The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.
这是James Iry的一篇文章,将Java中的void与Scala中的Unit进行比较。 (与void不同,unit是可以返回的实际值。)他演示了使用Unit类型而不是void的优点:
Java, C++, and C# programmers do solve this problem all the time. One common option is to not use Function but some other concept like"Action" to mean a function that takes a string, performs a side effect, and returns nothing useful. Then you essentially duplicate"map" into something called perhaps"foreach" that expects an Action and returns void. That probably makes sense in this case since a list of references to a meaningless value is perhaps silly, but it also means a great deal of code duplication if this kind of higher order programming is common. For instance, you can't write just one compose function that creates a function from two other functions, you also have to write a compose that takes an action and a function to create an action.
@Codebender:对,修好了。
a.notify()只是用作void方法的一个例子,仅仅因为我想不出任何其他方法。
@Zizouz212:明白了,这只是一个非常糟糕的例子。 你可以使用返回类型为void的另一个方法。
当然,在那种情况下,我会这样做。
声明为void的函数不能return任何东西,就像错误所说的那样。你假设a.notify()返回任何东西都是假的,因为a.notify()也不能返回任何东西(因为它是无效的)。
a.notify()是void方法。 我从来没有说它会返回任何东西。
return statements simply cannot be used with `Void` as it's Return type.
你无法改变语言规则!
Java编译器不会那么深入。当它在void函数中看到返回关键字后面带有一些值时会抛出编译错误。这是编程的。就如此容易。
我可以将简单的return;放在我的代码中......没有错误
java void 返回_关于java:Void方法不能返回void方法的值?相关推荐
- java 重用性_提高Java代码重用性的三个方法
三种修改现有代码提高其可重用性的方法,它们分别是:改写类的实例方法,把参数类型改成接口,选择最简单的参数接口类型. 措施一:改写类的实例方法 通过类继承实现代码重用不是精确的代码重用技术,因此它并不是 ...
- java skip函数_【Java必修课】图说Stream中的skip()和limit()方法及组合使用
1 简介 本文将讲解Java 8 Stream中的两个方法:skip()和limit().这两个方法是Stream很常用的,不仅各自会被高频使用,还可以组合出现,并能实现一些小功能,如subList和 ...
- java matcher函数_在Java正则表达式中使用Matcher.end()方法
方法java.util.regex.Matcher.end()返回根据正则表达式从序列中匹配最后一个字符后的偏移值.此方法不需要任何参数.如果没有匹配发生,或者匹配操作失败,则抛出IllegalSta ...
- java 调用关系_【Java基础】几种简单的调用关系与方法
直接上代码吧. class lesson4AB //同一个类下的public修饰的方法A,B可以相互调用 { public void A() { B();//等价于this.B(); } public ...
- java图片叠加_[原创]JAVA中图片上叠加文字的方法
--sunfruit JDK:1.3.x以上 功能:下面是一个简单在图片上面叠加文字的方法,有朋友如果有这方面的问题,就起个了解的作用 代码如下: import java.io.IOException ...
- java 客户端定时任务_定时任务最简单的3种实现方法(超实用)
定时任务在实际的开发中特别常见,比如电商平台 30 分钟后自动取消未支付的订单,以及凌晨的数据汇总和备份等,都需要借助定时任务来实现,那么我们本文就来看一下定时任务最简单的几种实现方式. TOP 1: ...
- java pow实现_实现Java Math.pow(double a,double b) 方法
使用 Java 开发移动设备应用程序时,可能需要用到特定 Java VM 所没有的数学方法.本文将专门解决 Java ME 没有"幂"方法 Math.pow() 的问题.我们将演示 ...
- java 倾斜校正_简述Java图像倾斜方法及实例
可以使用 graphics2D 类提供的 shear() 方法设置绘图的倾斜方向,从而使图像实现倾斜的效果.下面,我们一起来看一下它的使用方法和实例. 语法如下: shear(double shx,d ...
- java深度克隆_浅析Java中clone()方法浅克隆与深度克隆
现在Clone已经不是一个新鲜词语了,伴随着"多莉"的产生这个词语确实很"火"过一阵子,在Java中也有这么一个概念,它可以让我们很方便的"制造&qu ...
最新文章
- 微信小程序 统一支付 php,微信/微信小程序统一下单(PHP版)
- VSTO Office二次开发PPTRibbonX命令操作及对象添加
- 内置函数sorted的10个小tips
- 经典背包问题 01背包+完全背包+多重背包
- HTML/CSS——网页SVG ICON(小图标)解决方案
- 百度地图实现定位功能
- 1001. A+B Format (20)---------------PAT开始
- AD+DNS安装步骤详解
- 面试官:this和super有什么区别?this能调用到父类吗?
- vscode 注释快捷键_koroFileHeader:一个用于生成文件头部注释和函数注释的插件
- ActiveMQ RabbitMQ RokcetMQ Kafka实战 消息队列中间件视频教程
- Android应用程序开发以及背后的设计思想深度剖析(3)
- 使用Tesseract对图片文字OCR识别
- 「网络流 24 题」负载平衡
- 新鲜出炉:2021 编程语言排行榜~
- android基础 [超级详细android Activity组件解析(Activity综述,Activity生命周期,Activity启动--携带参数启动)]
- oracle 11g 新特性之动态绑定变量窥视(一)
- nz-tree的右键菜单的实现, 以及选中状态的实现
- 怎样输入字符型数据技巧
- 信息系统开发与管理【五】之 系统分析