繁体   English   中英

抽象类持有成员字段还是使用具体实现的Getter()?

[英]Abstract Class Hold Member Field or Use Getter() of Concrete Implementation?

我正在努力解决的一个 OOP 原则是抽象类及其保存成员字段(变量)的能力。

以以下代码为例示例 1 ):

public abstract class AbstractClassConstructor {

    List mList;

    public AbstractClassConstructor(List list) {
        mList = list;
    }

    public Object getListRow(int row) {
        return mList.get(row);
    }
}

并请检查此提供相同功能的替代代码(示例 2 ):

public abstract class AbstractClassGetter {

    public abstract List getList();

    public Object getListRow(int row) {
        return getList().get(row);
    }
}

我还关心示例 1示例 2是否更易于维护,并且我想尽可能地遵循 OOP 标准。

目前,我在示例 1 中看到的耦合比在示例 2 中看到的更多,尽管我没有看到很多其他问题。 然而,示例 2 更直接,我喜欢具体实现保存私有字段,而AbstractClassGetter使用一种方法来获取它。 这感觉更好,但我正在努力应用正确的 OOP 原则来帮助我从这个角度了解哪个更好。

至于我,如果mList将在子类中使用mList的函数特定于其类型(例如 LinkedList 或 ArrayList),则示例 1将不理想。 这是因为在使用之前可能需要将其转换为实际类型。 在这种情况下,示例 2会更好。

如果子类中不需要特定类型的函数,那么示例 1在封装方面会更好。

更新

另一种可能被认为是中间立场的方法是使用泛型。

public abstract class AbstractClassConstructor<T extends List> {

    T mList;

    public AbstractClassConstructor(T list) {
        mList = list;
    }

    public Object getListRow(int row) {
        return mList.get(row);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM