如何扩展 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);
}
我在 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);
}