Scala和Java代码的示例,其中Scala代码看起来更简单/行数更少?
2022-08-31 10:48:56
我需要一些 Scala 和 Java 代码的代码示例(我也对它们非常好奇),这些示例表明 Scala 代码比用 Java 编写的代码更简单、更简洁(当然,这两个示例应该解决相同的问题)。
如果只有Scala示例带有诸如“这是Scala中的抽象工厂,在Java中它看起来会更麻烦”之类的注释,那么这也是可以接受的。
谢谢!
我喜欢所有接受和这个答案
我需要一些 Scala 和 Java 代码的代码示例(我也对它们非常好奇),这些示例表明 Scala 代码比用 Java 编写的代码更简单、更简洁(当然,这两个示例应该解决相同的问题)。
如果只有Scala示例带有诸如“这是Scala中的抽象工厂,在Java中它看起来会更麻烦”之类的注释,那么这也是可以接受的。
谢谢!
我喜欢所有接受和这个答案
让我们改进堆叠器的示例并使用 Scala 的 case 类:
case class Person(firstName: String, lastName: String)
上面的Scala类包含下面Java类的所有功能,还有更多 - 例如,它支持模式匹配(Java没有)。Scala 2.8 添加了命名参数和默认参数,这些参数用于为 case 类生成复制方法,该方法提供与以下 Java 类的 with* 方法相同的功能。
public class Person implements Serializable {
private final String firstName;
private final String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public Person withFirstName(String firstName) {
return new Person(firstName, lastName);
}
public Person withLastName(String lastName) {
return new Person(firstName, lastName);
}
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Person person = (Person) o;
if (firstName != null ? !firstName.equals(person.firstName) : person.firstName != null) {
return false;
}
if (lastName != null ? !lastName.equals(person.lastName) : person.lastName != null) {
return false;
}
return true;
}
public int hashCode() {
int result = firstName != null ? firstName.hashCode() : 0;
result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
return result;
}
public String toString() {
return "Person(" + firstName + "," + lastName + ")";
}
}
然后,在使用中,我们有(当然):
Person mr = new Person("Bob", "Dobbelina");
Person miss = new Person("Roberta", "MacSweeney");
Person mrs = miss.withLastName(mr.getLastName());
对
val mr = Person("Bob", "Dobbelina")
val miss = Person("Roberta", "MacSweeney")
val mrs = miss copy (lastName = mr.lastName)
我发现这个令人印象深刻
爪哇岛
public class Person {
private final String firstName;
private final String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
斯卡拉
class Person(val firstName: String, val lastName: String)
以及这些(抱歉没有粘贴,我不想窃取代码)