什么是getter和setter方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是getter和setter方法相关的知识,希望对你有一定的参考价值。
getter和setter方法在Java中,一种简单常用的封装方式是使用getter和setter方法。下面这段代码是一个简单的命名为Contact的类的定义:
public class Contact
public String name;
public int age;
public String email;
该定义使得外部对象能够直接访问类Contact的成员变量,如下所示:
Contact c = new Contact();
c.name = "Alice";
c.age = 13;
c.email = "alice@mymail.com";
用过几次之后,发现Contact实际上需要包含多个email地址。遗憾的是,当在这个类的实现中增加多个地址时,整个程序中的每个调用Contact.email的地方都需要进行相应的修改。
下面这个类的情况与其相反:
class Contact
private int age;
private String name;
private String email;
Contact(int age, String name, String email)
this.age = age;
this.name = name;
this.email = email;
public int getAge()
return age;
public String getName()
return name;
public String getEmail()
return address;
在上面这个版本的Contact类中,使用了private访问修饰符,它不允许直接访问类的成员变量。提供了public类型的getter方法,使用方使用这些方法来得到所需要的Contact对象的name、age和email地址。例如,可以将email地址保存在对象内部,正如前一个例子那样,也可以使用username和hostname组合,只要这种方式对于给定的应用更便捷即可。在类的内部,成员变量age可以是int类型或integer类型。这个版本的Contact类可以做到支持多个email地址,而不需要对客户端有任何修改。
Java允许对成员变量直接引用,而它和某些语言不同,它不支持对getter和setter方法中的成员变量的引用进行封装。为了防止封装,必须自己定义每个访问方法。大多数IDE会提供代码生成功能,可以快速准确地完成这个功能。
通过getter和setter这种封装方法可以提供灵活性,因为直接的成员变量访问意味着如果某个成员变量的类型发生变化,则使用该成员变量的所有代码都需要进行修改。getter和setter方法代表的是一种简单的对象封装机制。一个良好的惯例是建议所有的成员变量都定义为private类型或final类型。编写良好的Java程序会使用getter和setter方法,以及一些其他更复杂的封装方式,从而保证在复杂程序中的灵活性。 参考技术A getter 和setter是JAVABean提供的取值和赋值的方法。属性是有提供公有的取值和赋值方法,保证数据安全性getter方法是取值,setter是赋值 参考技术B public class ceshi /**
* @param args
*/
private String name;
public String getName() //get方法
return name;
public void setName(String name) //set方法
this.name = name;
public static void main(String[] args)
ceshi c = new ceshi();
c.setName("张三");
String admin_name = c.getName();
龙目岛不生成getter和setter?
【中文标题】龙目岛不生成getter和setter?【英文标题】:Lombok not generating getter and setter? 【发布时间】:2022-01-19 07:12:01 【问题描述】:第一次使用 lombok,如果我理解正确,lomboks getter 和 setter 注释会生成 setter 和 getter 方法而无需对其进行编码,但由于某种原因,每当我尝试时,我都会收到“未定义的方法”错误调用 getter/setter 方法。
这里有什么问题?
import lombok.Getter;
import lombok.Setter;
public class Student
@Getter @Setter
private String firstName;
@Getter @Setter
private String lastName;
public Student(String firstName, String lastName)
super();
this.setFirstName(firstName); // method undefined error here
this.setLastName(lastName); // method undefined error here
【问题讨论】:
你需要在类的顶部添加@Data
注解。 objectcomputing.com/resources/publications/sett/…
你的导入错误? import lombok.Getter; import lombok.Setter;
@ping.shantanu 感谢您的评论。您不只是指定类级别的数据注释吗?它没有说我必须添加数据。所有文档都说 Data 是一个注释,包括 Getter、Setter、ToString 等的所有特征。
@user7294900,对不起,我忘了在问题中添加 setter 导入。
Eclipse 的 Lombok 设置:projectlombok.org/setup/eclipse
【参考方案1】:
您的代码应该这样工作, 你的 EDI 上安装了 lombok 的插件吗?
【讨论】:
Lombok 插件实际上并没有安装在我的 IDE 中。我认为它已安装,但在导入时没有说任何错误。谢谢@Clint Magnus 和@Dan_Maff 我向朋友们道歉。【参考方案2】:Lombok 没有安装在我的 IDE 中。
安装它解决了问题。
【讨论】:
【参考方案3】:另一种简单的方法是使用@Data
注释,它为类中的每个属性生成getter 和setter。
import lombok.Data;
@Data
public class Student
private String firstName;
private String lastName;
public Student(String firstName, String lastName)
super();
this.setFirstName(firstName);
this.setLastName(lastName);
快速说明:导入某些东西不会使用它。它只是告诉程序一些可能被使用的东西。如果您使用的是现代 Java IDE(VSCode 或 IntelliJ),类、注释等将在您使用时自动导入。
【讨论】:
这没有回答问题。它只是重复使用其他注释的问题。【参考方案4】:这样试试
@Getter
@Setter
public class Student
private String firstName;
private String lastName;
public Student(String firstName, String lastName)
this.setFirstName(firstName);
this.setLastName(lastName);
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于什么是getter和setter方法的主要内容,如果未能解决你的问题,请参考以下文章