我知道在从类外部访问Java时,为Java中的任何属性使用getter / setter的好处,但这些最佳实践是否包括内部访问?
通常会看到构造函数方法通过this.foo = foo设置变量,如下所示:
public class Person {
private int age;
private String firstName;
private String lastName;
public Person(String firstName, String lastName, int age) {
this.age = age;
this.firstName = firstName;
this.lastName = lastName;
}
// getters & setters...
如果我需要从班级内部访问属性,该怎么办?
提前谢谢。
编辑:感谢您的所有评论。这似乎是一个意见问题,前提是似乎没有一个最好的做法'对于这种情况。
答案 0 :(得分:1)
setters& getters提供了一个很好的机制来封装类的一些成员(即没有其他对象可以从外部读取或写入那些没有使用正确方法的那些),因为你在类中,有对你自己的成员没有限制,你可以使用或不使用setter / getter来读/写成员,所以请改用直接访问!
答案 1 :(得分:1)
define('WP_HOME','http://example.com');
define('WP_SITEURL','http://example.com');
define('FORCE_SSL_ADMIN', false);
的主要概念是限制其他对象直接访问您的类成员。这就是为什么成员被声明为Encapsulation
并且getter / setter被设置为private
。
因此,任何想要访问成员的类都只允许使用getter / setter。
如果您想在内部对变量执行某些操作,您可以使用public
等this
直接访问它们。在同一个类中使用getter / setter是不必要的,尽管不是不应该这样做。
您可以找到有关getter / setters here
的更多信息答案 2 :(得分:1)
Setter和getter是一些方法,其主要目的是访问成员并在setter的情况下更改其值,并在getter的情况下更改其值return
。例如:
public class User {
protected String name;
public void setName(String name) {
this.name = name;
}
public String getName(String name) {
return this.name;
}
public User(String name) {
this.name = name;
}
}
一般而言,直接访问name
成员来获取或设置其值没有任何问题,但是,即使在内部访问的情况下,使用setter和getter也更加优雅。如果我们再看一下上面的例子,我们仍然不会直接看到使用setter和getter的好处。但是,随着时间的推移,这些方法可能会发生变化,并且可能会带来更多好处。例如,您可能希望每次更改用户name
时保存日志记录。如果您有很多this.name = "foo"
,那么您需要将所有这些更改为this.setName("foo")
以获得设置者的好处。您可以通过查看setter在将来可能不那么简单并且首先编写高级代码的可能性来避免重构的这种需求。吸气剂也是如此。人们可能也希望在getter中做一些其他事情。示例:有人可能希望在调用getter时记录,例如查看调用堆栈。