什么是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方法的主要内容,如果未能解决你的问题,请参考以下文章

使用getter和setter的pythonic方法是啥?

getter和setter

getter和setter

龙目岛不生成getter和setter?

java getter和setter作用是啥?

为什么使用Getter和Setter?Getter和Setter有什么区别?