前言
在 java 编程中,void 和 void 是两个容易混淆的概念。虽然它们看起来相似,但实际上有着截然不同的用途和特性。
void关键字
定义
void是 java 中的一个关键字。- 用于方法声明中,表示该方法不返回任何值。
用途
- 当一个方法执行某些操作(如打印、修改数据等),但不需要返回结果时,可以使用
void作为返回类型。 - 方法内部可以有任意数量的语句,但不能有
return语句返回一个值。不过,可以使用return;来提前结束方法。
示例
public class example {
public static void main(string[] args) {
// 调用一个 void 方法
printhello();
}
// 定义一个 void 方法
public static void printhello() {
system.out.println("hello, world!");
}
}
在这个例子中,printhello 方法没有任何返回值,它只是简单地打印一条消息。
void类
定义
void是java.lang包中的一个类。- 它是
void关键字的引用类型包装类。 void类是一个不可实例化的类(即不能创建void对象)。void类只有一个静态字段null,通常用来表示没有实际的void值。
用途
- 主要用于泛型(generics)中,因为泛型不能直接使用基本类型或
void关键字。 - 在某些情况下,特别是使用函数式接口(如
consumer或supplier)时,void可以用来表示没有返回值的情况。
示例
泛型中的使用
import java.util.arraylist;
import java.util.list;
public class voidexample {
public static void main(string[] args) {
// 创建一个 list<void>,但实际上我们不会真正存储 void 实例
list<void> voidlist = new arraylist<>();
// 尝试添加 null 到列表中
voidlist.add(null);
// 打印列表
for (void v : voidlist) {
system.out.println(v); // 输出: null
}
}
}
在这个例子中,虽然我们创建了一个 list<void>,但由于 void 类不可实例化,我们只能将 null 添加到列表中。
函数式接口中的使用
import java.util.function.consumer;
public class voidexample {
public static void main(string[] args) {
// 使用 consumer<void> 表示一个消费者,它接受一个 void 类型的参数
consumer<void> consumer = (v) -> {
system.out.println("this is a consumer that takes no input.");
};
// 传递 null 作为 void 类型的值
consumer.accept(null);
}
}
在这个例子中,consumer<void> 表示一个消费者,它接受一个 void 类型的参数。由于 void 类不可实例化,我们传递 null 作为参数。
获取void的唯一实例
public class voidexample {
public static void main(string[] args) {
// 获取 void 的唯一实例
void avoid = null; // 或者 void avoid = void.type;
// 打印 void 实例
system.out.println(avoid); // 输出: null
}
}
在这个例子中,void 类有一个静态字段 null,我们可以使用 null 或 void.type 来表示这个唯一的实例。
实际代码例子
使用r<void>的删除操作
假设你有一个 restful api 控制器,其中包含一个删除记录的方法:
import org.springframework.web.bind.annotation.deletemapping;
import org.springframework.web.bind.annotation.pathvariable;
import org.springframework.web.bind.annotation.restcontroller;
@restcontroller
public class warehousecontroller {
private final immswarehousedetailedappservice immswarehousedetailedappservice;
public warehousecontroller(immswarehousedetailedappservice immswarehousedetailedappservice) {
this.immswarehousedetailedappservice = immswarehousedetailedappservice;
}
@deletemapping("/deletebyid/{detailid}")
public r<void> deletebyid(@pathvariable long detailid) {
boolean success = immswarehousedetailedappservice.deletebyid(detailid);
return toajax(success);
}
public static <t> r<t> toajax(boolean success) {
if (success) {
return new r<>(200, "操作成功", null);
} else {
return new r<>(500, "操作失败", null);
}
}
}
// 自定义响应类
class r<t> {
private int code;
private string message;
private t data;
public r(int code, string message, t data) {
this.code = code;
this.message = message;
this.data = data;
}
// getter 和 setter
public int getcode() {
return code;
}
public void setcode(int code) {
this.code = code;
}
public string getmessage() {
return message;
}
public void setmessage(string message) {
this.message = message;
}
public t getdata() {
return data;
}
public void setdata(t data) {
this.data = data;
}
}
解析
@deletemapping 注解
@deletemapping用于映射 http delete 请求到特定的处理方法。/deletebyid/{detailid}是请求路径,其中{detailid}是路径变量,表示要删除的记录的 id。
方法签名
public r<void> deletebyid(@pathvariable long detailid)r<void>表示返回一个泛型类型r,其泛型参数是void。这意味着该方法不会返回具体的业务数据,只会返回一个状态信息。@pathvariable long detailid表示从 url 路径中提取detailid参数,并将其作为方法参数传递。
方法体
return toajax(immswarehousedetailedappservice.deletebyid(detailid));immswarehousedetailedappservice.deletebyid(detailid)调用服务层的方法来删除指定 id 的记录。toajax(...)是一个工具方法,将服务层的返回结果转换为一个r类型的对象,通常包含成功或失败的状态码和消息。
自定义响应类 r<t>
r<t>是一个泛型类,用于封装 api 的响应数据。- 它包含三个属性:
code(状态码)、message(消息)和data(数据)。 data属性的类型是泛型t,当t为void时,表示该方法不返回具体的业务数据。
工具方法 toajax
toajax是一个工具方法,用于将布尔值转换为r对象。- 如果删除成功,返回
r<void>对象,包含成功状态码和消息;否则,返回失败状态码和消息。
总结
void是一个关键字,用于方法声明,表示该方法不返回任何值。void是一个类,主要用于泛型和某些特定场景下表示没有返回值的情况。它是一个不可实例化的类,只有一个静态字段null。
void
- 定义:
void是 java 中的一个关键字。 - 用途:用于方法声明,表示该方法不返回任何值。
- 通俗理解:
void就像一个“空盒子”,表示这个方法执行完之后不会给你任何东西。它只是做一些事情,比如打印信息、修改数据等,但不会返回任何结果。
void
- 定义:
void是java.lang包中的一个类。 - 用途:主要用于泛型中,因为泛型不能直接使用基本类型或
void关键字。 - 通俗理解:
void是一个特殊的“盒子”,虽然它里面什么也没有(不可实例化),但它可以用来表示“没有具体的返回值”。在某些情况下,特别是在使用泛型时,我们需要一个占位符来表示没有返回值的情况,这时就可以使用void。
通俗对比
void:方法执行完后没有任何返回值,就像你做了一件事但没有得到任何回报。void:方法可能有返回值,但返回的是一个特殊的对象,表示“没有具体的业务数据”,但它仍然可以包含一些状态信息(如成功或失败的状态码和消息)。
附:java 方法中加void和不加void的区别
只要记住void即无返回值就ok了,如果不用void,那么这个地方一定是被一个其它的数据类型所替代,比如下面用的是string,当然也可能是int或者boolean等等,那么此时我们下面就要有一个return返回值。
package com.thursday.one;
public class variable {
public static void speaker(){
system.out.println("你好");
}
public static string talk(){
return "hello";
}
public static void main(string[] args) {
speaker();
talk();
string astring = talk();
system.out.println(astring);
}
}到此这篇关于java中void和void的区别和特性的文章就介绍到这了,更多相关java void和void区别内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论