如何扩展 apache FTPFile 的功能?

How can I extend the functionality of apache FTPFile?

我在 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 对象的状态中并在需要时调用它的功能?

委派

or should I store an FTPFile object in the state of a Folder object and call its functionality whenever I need it?

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

例子

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);
}