【问题标题】:How can I extend the functionality of apache FTPFile?如何扩展 apache FTPFile 的功能?
【发布时间】:2019-06-23 11:02:18
【问题描述】:

我正在学习 Java 中的 OOP,但遇到了一个问题。我需要创建一个自定义对象Folder,它保留了FTPFile 对象的功能并向其添加更多内容。

FTPClient client = new FTPClient();
FTPFile[] folders = client.listFiles();

我需要将数组folders中的所有对象从FTPFile转换为Folder对象,我想在子类的构造函数中设置超类的状态:

public Folder(FTPFile ftpF) {
    super.setName(ftpF.getName());
    super.setLink(ftpF.getLink());
    super.setHardLinkCount(ftpF.getHardLinkCount());
    super.setGroup(ftpF.getGroup());
    super.setSize(ftpF.getSize());
    super.setTimestamp(ftpF.getTimestamp());
    super.setType(ftpF.getType());
    super.setUser(ftpF.getUser());
}

但我不知道这是否是一个好习惯。我应该这样做还是应该将FTPFile 对象存储为Folder 对象的状态并在需要时调用它的功能?

【问题讨论】:

    标签: java apache oop inheritance delegation


    【解决方案1】:

    代表团

    还是应该将 FTPFile 对象存储在 Folder 对象的状态中,并在需要时调用它的功能?

    您遇到了delegation 的想法。这是一种非常灵活的方式来扩展类的功能而不继承它。

    示例

    class Folder {
        private FTPFile ftpFile;
    
        public FTPFile(FTPFile ftpFile) {
            this.ftpFile = ftpFile;
        }
        
        // more code..
    }
    

    假设您想扩展FTPFile 的方法setName(string) 并且所有名称都应为大写:

    public void setName(String name) {
        String uppercaseName = name.toUppercase();
        
        // delegate the task with the uppercase name
        ftpFile.setName(uppercaseName);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-02-12
      • 2021-08-23
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 2013-01-07
      • 2012-04-09
      • 2018-09-27
      相关资源
      最近更新 更多