Java类构造函数this.id = id或this.setId(id)

问题描述 投票:1回答:2

[在Android Studio中,我创建了Person.java类。我使用Generate来创建getter和setter以及构造函数。

这是我的Person.java类:

public class Person {
private int id;
private String firstName;
private String lastName;
private String email;

    public User(int id, String firstName, String lastName, String email) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
    }

    public void setId(int Id) {
        this.Id = Id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

我可以/应该将构造函数更改为此:

public Person(int Id, String firstName, String lastName, String email) {
    this.setId(Id);
    this.setFirstName(firstName);
    this.setLastName(lastName);
    this.setEmail(email);
}

[自动生成的还是我更改为的会更好?运行时会有所改进吗?

我对PHP(7.4)类也有同样的问题。

提前感谢!

java android class php-7
2个回答
0
投票

这是优先事项。但是,使用自动生成的样式的好处是它不需要设置器。您将不会获得任何性能改进。


0
投票

Java编译器通常会优化很多东西,因此最终无论如何代码都可能会转换为第二个示例,因为方法调用通常比直接设置值更糟糕。

在您的示例中,它实际上没有任何区别,我只保留第一个,因为您可以在生成它时保留它。即使第二种选择的效果更好,其好处还是太小而无法引起人们注意。

真正调用构造函数中的setter的唯一原因是它们内部是否具有逻辑,在这种情况下,您可以检查电子邮件是否为真实电子邮件。然后最好在构造函数中调用setEmail(email),因为该方法包含不应放入构造函数的逻辑(而且在构造函数和setter中进行检查将是不必要的代码重复)]

[在进行Android编程时,您也可以查看Kotlin,它看起来像这样:

data class User(val id:Int, var firstName:String, var lastName:String, var email:String)

这将替换您编写的整个类,您不需要设置器,因为可以在需要时选择定义它们。

© www.soinside.com 2019 - 2024. All rights reserved.