网易首页 > 网易号 > 正文 申请入驻

Java 变得越来越像 Rust?

0
分享至


翻译 | DeepL翻译 责编 | 苏宓

出品 | CSDN(ID:CSDNnews)

随着编程技术的增强和复杂性的提升,许多编程语言也纷纷效仿,Java 也不例外。

另一边,尽管社区内部问题重重,但 Rust 仍逐年获得开发人员的喜爱。这背后都是有原因的:Rust 的编译器让开发人员避免了各种问题。编译器对正确性的要求让一些开发人员开始感到不安全。

我想展示两个 Rust 特性,它们是 Rust 优秀之处的一部分,然后将它们与 Java 的最新创新进行比较。

免责声明:我绝不是说这些 Rust 特性导致 Java 中出现了相应的特性。如果是 Kotlin 或 Scala 在实现这些特性方面发挥了更大的作用,我也不会感到惊讶。但是,我很高兴看到 Rust 的特性也能在(某种程度上)Java 中找到!


Immutable Data

在编程领域,Immutable Data 是指一种一旦创建就不能更改的数据结构。在 Rust 中,数据默认是不可变的。


struct User {
// struct members are immutable
name: &'static str,
age: i32

fn main() {
// user and members are immutable
let user = User { name: "Bob", age: 42 };
}

如果我们希望数据是可变的,就必须显式声明它是可变的。


fn main() {
let mut user = User { name: "Bob", age: 42 };
user.name = "Jim";

现在,普通的 Java 对象(又称 POJO)在编写时通常默认具有可变性,而且相当冗长。

下面是它在 Java 8 中的样子:


public class User {
private String name;
private int age;

public User(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return this.name;
}

public int getAge() {
return this.age;
}

public void setName(String name) {
this.name = name;
}

public void setAge(int age) {
this.age = age;
}

public static void main(String[] args) {
User user = new User("Bob", 42);
user.setName("Jim");
System.out.println(user.getName());
}

// not to mention equals(), toString() and friends!
}

不过,多亏了现代 Java,记录类简化了这一过程,并考虑到了不变性,我们的代码也就不那么冗长了。下面是启用了预览功能的有效 Java 21 代码。


record User(String name, int age) {}

void main() {
final var user = new User("Bob", 42);
}


代数数据类型

在这段视频中,我们将看到 Rust 如何利用代数类型来帮助使无效状态无法表示,并有力地保证不会出现错误行为。

在 Rust 中,这可以通过使用枚举来实现:


enum RealCat {
Alive { is_hungry: bool },
Dead

fn main() {
let real_cat: RealCat = RealCat::Alive { is_hungry: true };
match real_cat {
RealCat::Alive { is_hungry } => {
if is_hungry {
println!("The cat demands a sacrifice.");
} else {
println!("The cat is bored.");
}
},
RealCat::Dead => println!("Oh no!!!")
}
}

直到最近,Java 仍无法优雅地实现这一点。不过,从 Java 21 及以后的版本开始,您可以使用包含记录的密封接口和详尽的开关语法在 Java 中优雅地实现这一功能:

RealCat.java


public sealed interface RealCat permits RealCat.Alive, RealCat.Dead {

record Alive(boolean isHungry) implements RealCat {}
record Dead() implements RealCat {}

static void check(RealCat realCat) {
switch (realCat) {
case Alive aliveCat -> {
if (aliveCat.isHungry()) {
System.out.println("The cat demands a sacrifice.");
} else {
System.out.println("The cat is bored.");
}
}
case Dead _ -> System.out.println("Oh no!!!");
}
}
}

RealCatApplication.java


void main() {
final var hungryCat = new RealCat.Alive(true);
RealCat.check(hungryCat);


结论

有无数理由表明 Java 永远不会成为 Rust,但我很高兴看到 Rust 的一些强大功能正在进入 Java。这将巩固 Java 作为商业世界首选编程语言之一的长期地位。由于 OpenJDK 项目致力于提高开发人员的工作效率,Java 在过去 28 年中一直占据着重要的市场份额,即使不能在未来 28 年中重新夺回重要的市场份额,也有望保持这一地位。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
神舟十七号凯旋归来!航天员出舱时站不起来?为何要被抬着走

神舟十七号凯旋归来!航天员出舱时站不起来?为何要被抬着走

搞笑的阿票
2024-04-30 19:13:03
大反转!女家属再度发文证明车门可以打开!谁想让华为死?

大反转!女家属再度发文证明车门可以打开!谁想让华为死?

爱下厨的阿酾
2024-04-30 23:55:52
日本最牛散户,从300万日元赚到230亿!采访中公布了交易技巧

日本最牛散户,从300万日元赚到230亿!采访中公布了交易技巧

别人都叫我阿腈
2024-04-30 13:11:35
国运来了挡都挡不住?俄乌战争最起码给中国又争取了五年时间

国运来了挡都挡不住?俄乌战争最起码给中国又争取了五年时间

曾经年少
2024-03-05 11:38:53
马龙:詹姆斯是GOAT&浓眉名人堂 这轮系列赛远比4-1看起来艰难

马龙:詹姆斯是GOAT&浓眉名人堂 这轮系列赛远比4-1看起来艰难

直播吧
2024-04-30 18:52:50
51岁的广州演员彭新智,与何文茵已缘尽,他却做一辈子的康祈耀

51岁的广州演员彭新智,与何文茵已缘尽,他却做一辈子的康祈耀

娱乐八卦木木子
2024-05-01 00:10:12
快船消息:裁判报告出炉,哈登三项数据第一,明智决定曝光

快船消息:裁判报告出炉,哈登三项数据第一,明智决定曝光

冷月小风风
2024-04-30 10:44:12
“云浩止耕”后续:央媒发声怒批,官方再一次发通报,果然有情况

“云浩止耕”后续:央媒发声怒批,官方再一次发通报,果然有情况

历史有些冷
2024-04-28 18:30:07
吃“春药”,是一种怎样的体验?女子亲身经历,告诉你真实感受

吃“春药”,是一种怎样的体验?女子亲身经历,告诉你真实感受

39健康网
2024-01-16 21:30:03
凌晨4点,中国移动这家营业厅就有人排队办业务,顾客:跑了6次都没办上,还有人雇人排队

凌晨4点,中国移动这家营业厅就有人排队办业务,顾客:跑了6次都没办上,还有人雇人排队

每日经济新闻
2024-04-30 12:47:17
尘埃落定!国米正式敲定巴西新国脚!两员大将确认离开梅阿查

尘埃落定!国米正式敲定巴西新国脚!两员大将确认离开梅阿查

头狼追球
2024-04-30 11:02:45
城中之城大结局:苗彻被调海外,赵辉被判3年,吴显龙葬身火海

城中之城大结局:苗彻被调海外,赵辉被判3年,吴显龙葬身火海

洛子帅品评
2024-04-30 21:43:30
暮光女克里斯汀斯图尔特戛纳红毯脱鞋名场面,这姐好像不喜欢穿鞋

暮光女克里斯汀斯图尔特戛纳红毯脱鞋名场面,这姐好像不喜欢穿鞋

娱乐圈人物大赏
2024-04-16 06:18:36
利好!降佣标准落地,比降印花税管用?A股迎来5月“开门红”了

利好!降佣标准落地,比降印花税管用?A股迎来5月“开门红”了

程夏夏
2024-04-30 20:30:17
朴素!马斯克现身钓鱼台国宾馆,穿褶皱衣服,拿手机对着湖水狂拍

朴素!马斯克现身钓鱼台国宾馆,穿褶皱衣服,拿手机对着湖水狂拍

柠檬有娱乐
2024-04-30 16:14:26
“哈利波特城堡”被击中!俄军用装集束弹头的弹道导弹袭击敖德萨

“哈利波特城堡”被击中!俄军用装集束弹头的弹道导弹袭击敖德萨

鹰眼Defence
2024-04-30 18:45:13
重磅!何窦婚变?赌王千金的戒备与日俱增!各种借口不为窦骁生育

重磅!何窦婚变?赌王千金的戒备与日俱增!各种借口不为窦骁生育

娱乐的小灶
2024-04-30 18:01:03
大S限制女儿联系汪小菲一家, 小玥儿在张兰直播间偷偷留言哭诉

大S限制女儿联系汪小菲一家, 小玥儿在张兰直播间偷偷留言哭诉

路灯的光亮
2024-04-30 14:14:08
人称“石鸡”,只生活在完全没有污染的水中,公的比母的更有营养,但野生的快被吃绝了

人称“石鸡”,只生活在完全没有污染的水中,公的比母的更有营养,但野生的快被吃绝了

禾木报告
2024-04-22 13:20:00
她这回在内地彻底凉

她这回在内地彻底凉

娱乐圈酸柠檬
2024-04-29 20:31:02
2024-05-01 03:42:44
CSDN
CSDN
成就一亿技术人
24612文章数 241796关注度
往期回顾 全部

科技要闻

余承东卸任华为终端CEO 新任命为董事长

头条要闻

媒体:余承东将卸任华为终端BG CEO

头条要闻

媒体:余承东将卸任华为终端BG CEO

体育要闻

拜仁开场压着打6次射门颗粒无收,皇马第1次射门就先拔头筹

娱乐要闻

黄子韬被曝求婚徐艺洋 大量亲密照曝光

财经要闻

查道炯:中国经济的外部挑战与应对思考

汽车要闻

越野老炮最爱 哈弗新H9新增2.4T柴油机

态度原创

艺术
时尚
房产
旅游
军事航空

艺术要闻

用耳朵看展览?西岸美术馆最新特展关注声音艺术

岁月不败美人,姐姐们的50岁也太好看了

房产要闻

刺激!市区惊现1.1w/㎡新房+现房!海口楼市,五一打响价格战!

旅游要闻

五一大雨,浇灭了多少旅游城市的心气?

军事要闻

以官员:以总理求助拜登阻止逮捕令

无障碍浏览 进入关怀版