Scala和Java代码的示例,其中Scala代码看起来更简单/行数更少? [英] Samples of Scala and Java code where Scala code looks simpler/has fewer lines?

查看:202
本文介绍了Scala和Java代码的示例,其中Scala代码看起来更简单/行数更少?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要一些代码示例(我也很好奇他们)的Scala和Java代码,它们表明Scala代码更简单和简洁,然后用Java编写的代码(当然两个示例应该解决同样的问题)。



如果只有Scala样例,注释为这是Scala中的抽象工厂,在Java中它看起来会更加繁琐,那么这也是可以接受的。

谢谢!



我喜欢大部分接受, this answer

解决方案

让我们改进 stacker的示例,并使用Scala的案例类

 案例类Person(firstName:String, lastName:String)

上述Scala类包含以下Java类的所有功能,一些更多 - 例如它支持模式匹配(Java没有)。 Scala 2.8添加了命名和默认参数,用于为案例生成复制方法类,它提供与以下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;
}
人员=(人)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(){
returnPerson(+ firstName +,+ lastName +)
}
}

 个人mr = new Person(Bob,Dobbelina); 
人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)


I need some code samples (and I also really curious about them) of Scala and Java code which show that Scala code is more simple and concise then code written in Java (of course both samples should solve the same problem).

If there is only Scala sample with comment like "this is abstract factory in Scala, in Java it will look much more cumbersome" then this is also acceptable.

Thanks!

I like most of all accepted and this answers

解决方案

Let's improve stacker's example and use Scala's case classes:

case class Person(firstName: String, lastName: String)

The above Scala class contains all features of the below Java class, and some more - for example it supports pattern matching (which Java doesn't have). Scala 2.8 adds named and default arguments, which are used to generate a copy method for case classes, which gives the same ability as the with* methods of the following Java class.

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 + ")";
    }
}

Then, in usage we have (of course):

Person mr = new Person("Bob", "Dobbelina");
Person miss = new Person("Roberta", "MacSweeney");
Person mrs = miss.withLastName(mr.getLastName());

Against

val mr = Person("Bob", "Dobbelina")
val miss = Person("Roberta", "MacSweeney")
val mrs = miss copy (lastName = mr.lastName)

这篇关于Scala和Java代码的示例,其中Scala代码看起来更简单/行数更少?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆