Java 我应该添加一个方法吗;加上「;指向包含列表的类?

Java 我应该添加一个方法吗;加上「;指向包含列表的类?,java,class,oop,Java,Class,Oop,我的代码中有这个类: public class Schedule{ private List<ScheduleData> list; public Schedule(){ list = new ArrayList<>(); } public List<ScheduleData> getList(){ return list; } public void add(Schedul

我的代码中有这个类:

public class Schedule{
    private List<ScheduleData> list;

    public Schedule(){
        list = new ArrayList<>();
    }

    public List<ScheduleData> getList(){
        return list;
    }

    public void add(ScheduleData data){
        list.add(data);
    }
}

我认为,首先,您必须尝试满足面向对象的基本原则。其中之一就是信息隐藏

引用:

在计算机科学中,信息隐藏是计算机程序中最有可能改变的设计决策的分离原则,从而在设计决策改变时保护程序的其他部分不被广泛修改。保护包括提供一个稳定的接口,保护程序的其余部分不受实现的影响(最有可能更改的细节)

Schedule
类的客户机可能不需要知道如何在内部实现计划。您不希望客户端绑定到您选择在内部存储
ScheduleData
的实现。试想一下,如果您让您的客户机直接访问
列表
,一旦您想使用
更改实现,您将强制他们相应地进行更改

此外,遵循信息隐藏原则,您将减少类和客户机之间的耦合,提高可维护性

因此,根据您给我们提供的信息,您所能做的最好的事情可能是使用直接在
计划中定义的方法
add

我建议你改变的另一件事是方法

public List<ScheduleData> getList(){
    return list;
}

希望能有所帮助。

我认为,首先,您必须尝试满足面向对象的基本原则。其中之一就是信息隐藏

引用:

在计算机科学中,信息隐藏是计算机程序中最有可能改变的设计决策的分离原则,从而在设计决策改变时保护程序的其他部分不被广泛修改。保护包括提供一个稳定的接口,保护程序的其余部分不受实现的影响(最有可能更改的细节)

Schedule
类的客户机可能不需要知道如何在内部实现计划。您不希望客户端绑定到您选择在内部存储
ScheduleData
的实现。试想一下,如果您让您的客户机直接访问
列表
,一旦您想使用
更改实现,您将强制他们相应地进行更改

此外,遵循信息隐藏原则,您将减少类和客户机之间的耦合,提高可维护性

因此,根据您给我们提供的信息,您所能做的最好的事情可能是使用直接在
计划中定义的方法
add

我建议你改变的另一件事是方法

public List<ScheduleData> getList(){
    return list;
}

希望有帮助。

我更喜欢使用您编写的
add(ScheduleData)
方法。如果可以避免的话,我建议您避免在类中为
List
使用getter或
getList()
方法

这是因为它提供了某种程度的封装,并更好地促进了抽象,这被认为是面向对象编程的理想特性

封装是类之所以有用的部分原因。如果更改成员变量的大部分逻辑都写在包含它们的类中,那么代码将更容易理解和维护。下面是一个典型的入门级解释。您可能注意到,getter和setter经常被作为一种封装方式来讨论。对于存储对象引用的字段,如您的示例所示,考虑getter是如何使用的可能是有用的。我个人认为,如果您使用getter来获取对象引用,然后在其他地方编写代码来设置类内部的内容,那么您就失去了封装提供的好处

抽象是指丢弃与任务无关的任何信息的过程。目标是最大限度地减少您的类消费者必须考虑的数量。可能只有您会使用
计划
类,但如果您不需要确切记住它是如何实现的,它将使您的生活更轻松。如果您使用
add(scheduledatadata)
方法,您可能会发现以后使用类会更加直观。此外,它的任何文档都很简单……如果有人想将
ScheduleData
添加到他们的
Schedule
实例中,他们会看到有一个名为add的方法。如果考虑另一种选择,即查看成员变量以查看“<代码>列表> /代码>,然后查看<代码>列表的文档,以了解如何添加它,您可能会看到使用Add方法的好处。


这里是另一篇关于getter和setter的文章,它们也被称为。

我更喜欢使用您编写的
add(scheduledatadata)
方法。如果可以避免的话,我建议您避免在类中为
List
使用getter或
getList()
方法

这是因为它提供了某种程度的封装,并更好地促进了抽象,这被认为是面向对象编程的理想特性

封装是类之所以有用的部分原因。如果更改成员变量的大部分逻辑都写在包含它们的类中,那么代码将更容易理解和维护。下面是一个典型的入门级解释。您可能注意到,getter和setter经常被作为一种封装方式来讨论。对于存储对象引用的字段,如示例中所示,它
public List<ScheduleData> getList(){
    return Collections.unmodifiableList(list);
}