java getter和setter方法应该有什么名字

xesrikrc  于 2023-03-28  发布在  Java
关注(0)|答案(7)|浏览(173)

我仍然对getter和setter方法很困惑。

public class MethodsInstances {

    public MethodsInstances(String name){
        girlName = name;
    }

    private String girlName;

    public String getName(){
        return girlName;
    }

    public void sayName(){
        System.out.printf("Your first gf was %s", getName());

    }
}

但是对于“sayName”,为什么不使用getName(),而只是键入girlName呢?这是一样的,因为getName()返回girlName,正如代码中所见。还有,方法必须以get和set开头,还是可以命名为任何你想要的名字?
非常感谢新手程序员Dan B

qvk1mo1f

qvk1mo1f1#

getter和setter的意义在于,只有它们才能用来访问它们正在获取或设置的私有变量。这样,您就提供了封装,并且以后重构或修改代码会更容易。
假设你使用girlName而不是它的getter函数,那么如果你想添加一个默认值(假设默认名称是'Guest',如果之前没有设置的话),那么你必须修改getter函数和sayName函数。
getter和setter不需要以get和set开头-它们只是普通的成员函数。但是这样做是一种约定。(特别是如果您使用Java Beans

vfhzx4xs

vfhzx4xs2#

你完全可以在你的例子中直接使用这个变量,主要是因为sayName()在同一个类中。
除此之外,我认为有三个原因需要getter和setter:
1.这是面向对象编程的一个原则,保持值(状态)私有,并提供与其他类交互的公共方法。
1.带有getter和setter的类通常遵循Java beans设计模式。该模式允许在模板引擎或表达式语言(如JSP或Spring)中使用这些对象。
1.在某些情况下,它可以防止实际错误。例如:

public class DateHolder {
    public Date date;

    public static void main(String... args) {
        DateHolder holder = new DateHolder();
        holder.date = new Date();
        System.out.println("date in holder: " + holder.date);
        Date outsideDateRef = holder.date;
        outsideDateRef.setTime(1l);
        // will be different, although we did not change anything in the holder object.
        System.out.println("date in holder: " + holder.date);
    }
}

用getter和setter Package 日期变量,它们只对值而不是引用进行操作,可以防止这种情况:

public class DateHolder {
    private Date date;

    public Date getDate() {
       return (Date)this.date.clone();
    }

    public void setDate(Date date) {
       this.date = (Date) date.clone();
    }

    public static void main(String... args) {
        DateHolder holder = new DateHolder();
        holder.setDate( new Date() );
        System.out.println("date in holder: " + holder.getDate());
        Date outsideDateRef = holder.getDate();
        outsideDateRef.setTime(1l);
        // Date in holder will not have changed
        System.out.println("date in holder: " + holder.getDate());
    }
}
ct3nt3jp

ct3nt3jp3#

你可以在这里使用girlName,你真的不需要调用getName().需要getName的原因()是如果你想得到这个类之外的名字。例如,如果你创建一个新类,然后在新类中创建上面的类对象,并给那个对象分配一个名字(value for girlName)你将不能从new class访问girlName,因为它是私有的..所以你需要一个公共方法来为你获取值。
它也不一定是getName或setName,但这只是为了更容易理解函数在做什么。

jmo0nnb3

jmo0nnb34#

在方法中封装“获取”和“设置”变量的过程是一种常见的设计模式。如果您想要更改底层实现,这将给您更多的自由。
举个例子,假设有一天你想把参数girlName改为一个Girl对象;如果直接从外部类访问girlName,则必须更改所有外部代码。
使用setter方法,您可以简单地更改一个方法并执行

public void setGirlname(String name)
{
   girlname = new Girl(name, some_other_data);
}

或者,您可能希望确保girlname总是以大写形式返回。

public String getGirlname()
{
    return girlName.toUpperCase();
}

从而在代码设计中给您带来更多的灵活性。

2wnc66cl

2wnc66cl5#

您必须首先阅读abstractionencapsulationOOP,以了解accessors、mutators、immutability和data access。

lztngnrs

lztngnrs6#

我们想阻止对变量的直接访问,我们就把变量设为私有变量。当变量是私有的,其他类就不能访问该变量。如果我们把变量设为公共的,那么所有类都可以访问它。
要更改实际的私有变量,我们现在需要公共getter()或setter()。基本的命名约定说,我们将采用变量的名称,并在其前面加上get和/或set。
在您的特定情况下,getGirlname将是正确的。
我们称之为封装

6l7fqoea

6l7fqoea7#

通过这种方式,您可以检查类并在运行时使用反射调用它们。
高温加热
伊沃·斯托伊科夫

相关问题