Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java记录是否支持;加上;语法?_Java_Java 14_Java Record - Fatal编程技术网

Java记录是否支持;加上;语法?

Java记录是否支持;加上;语法?,java,java-14,java-record,Java,Java 14,Java Record,Java 14带来了记录,这在许多函数式语言中都是一个很好的补充: 爪哇: 公共记录车辆(字符串品牌、字符串牌照){ 毫升: 类型车辆= { 品牌:弦 牌照:字符串 } 在ML语言中,可以通过创建一个副本并更改几个值来“更新”记录: 让u= { Brand=“斯巴鲁” LicensePlate=“ABC-DEFG” } 让v= { u与 LicensePlate=“LMN-OPQR” } //同: 设v= { 品牌=美国品牌 LicensePlate=“LMN-OPQR” } 这在Java

Java 14带来了记录,这在许多函数式语言中都是一个很好的补充:

爪哇:

公共记录车辆(字符串品牌、字符串牌照){
毫升:

类型车辆=
{
品牌:弦
牌照:字符串
}
在ML语言中,可以通过创建一个副本并更改几个值来“更新”记录:

让u=
{
Brand=“斯巴鲁”
LicensePlate=“ABC-DEFG”
}
让v=
{
u与
LicensePlate=“LMN-OPQR”
}
//同:
设v=
{
品牌=美国品牌
LicensePlate=“LMN-OPQR”
}

这在Java14中可能吗?

不幸的是,Java不包含此功能。但是,您可以创建一个实用方法,该方法接受不同的车牌值:

带牌照的公共静态车辆(车辆a,新牌照){
归还新车(a.品牌、新牌照);
}
这样使用:

车辆a=新车(“斯巴鲁”、“ABC-DEFG”);
车辆b=带牌照的车辆(a,“LMN-OPQR”);

这将为您提供与您尝试使用“with”标记时类似的结果。您可以使用它来更新记录。

转到Java 16。他们有一些不错的变化。答案是:幸运的是,答案是:还没有。@texasbruce不使用龙目山。它在幕后耍了一些非常下流的把戏。在这篇探索性的文档中描述了一个“威瑟斯”的概念:@texasbruce就是不要。你让你的程序不那么经得起未来的考验。正确的声明应该是
公共车辆(车辆a,字符串newLicensePlate){this(a.brand,newLicensePlate);}
但无论如何,这是一种糟糕的模式。构造函数的参数类型不指示参数是新品牌还是新车牌,当两个元素的类型相同时,两个元素的支持构造函数根本不起作用。一种更干净的方法是在记录中添加一种方法,如
带牌照的公共车辆(字符串newLicensePlate){返回新车辆(品牌,新牌照);}
可以像
车辆b=A.带牌照(“LMN-OPQR”)
@Holger我对ML不太习惯,OP告诉我,
with
模式是在不引入任何新方法的情况下从记录框中期望得到的东西。我几乎制定了一个与您的提案类似的设计,但在我(现已删除)的回答中,我认为我无法真正达到OP的预期。@Holger建议是使用
自动实现的。令人失望的是,Java不支持这一点;当PL有“记录”时,通常会假定此功能。@Naman我知道OP要求的自动功能不幸地不存在(还?)。我只是回答了一个建议使用构造函数的答案,而一个方法会更好。@Holger,以防你还不厌倦我用Ping打你的问题,而这些问题仅仅是你可以回答的(imho),这就是其中之一