Scala和Java代码的示例,其中Scala代码看起来更简单/行数更少?

2022-08-31 10:48:56

我需要一些 Scala 和 Java 代码的代码示例(我也对它们非常好奇),这些示例表明 Scala 代码比用 Java 编写的代码更简单、更简洁(当然,这两个示例应该解决相同的问题)。

如果只有Scala示例带有诸如“这是Scala中的抽象工厂,在Java中它看起来会更麻烦”之类的注释,那么这也是可以接受的。

谢谢!

我喜欢所有接受和这个答案


答案 1

让我们改进堆叠器的示例并使用 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)

答案 2

我发现这个令人印象深刻

爪哇岛

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)

以及这些(抱歉没有粘贴,我不想窃取代码)


推荐