这是我想知道怎么做的事情,但却找不到适合这个问题的方法。
假设我有一个可以用于两个目的的类:上传和下载。本能地,我会创建一个像这样的对象:
public class File{
private FormFile uploadFile;
private File downloadFile;
private String uploadLocation;
private String downloadLocation;
//setters and getters
}
问题是,我希望每种类型只有一组访问器。例如,类中只有一个setFile(Object obj)
。但这会导致问题,因为FormFile和File是两个不同的对象。
public interface File{
public void setFile(Object obj);
public Object getFile();
public void setLocation;
public String getLocation;
}
然后创建另外两个对象:
public UploadFile implements File{
private FormFile file;
private String location;
//implementation of methods
}
public Download implements File{
private File file;
private String location;
//implementation of methods
}
如果您清理代码中的其他内容,这可能会有效。但我意识到事后这将更难维持。还有另一种解决方法吗?
喜欢:
File file = new File.UPLOAD;
会将用户限制为:
仅使用方法setFile(FileForm file){ }
,然后setFile(File file){ }
将无法使用。在实例化File file = new File.DOWNLOAD
我并不是真的想解决这个问题。只是一个想法。
答案 0 :(得分:1)
尝试使用泛型:
public class File < T > {
private T file;
private String location;
public T getFile() {
return file;
}
public void setFile( T file ) {
this.file = file;
}
public String getLocation() {
return location;
}
public void setLocation( String location ) {
this.location = location;
}
}
用法:
File< FormFile > uploadFile = new File< FormFile >();
uploadFile.setFile( new FormFile() );
File< java.io.File > downloadFile = new File< java.io.File >();
downloadFile.setFile( new java.io.File( "something.txt" ) );
答案 1 :(得分:0)
你过分思考它。
只需添加以下两种方法:
public void setUploadFile(FormFile f);
public void setDownloadFile(File f);
答案 2 :(得分:0)
- Interface
主要用于提供角色,或用于表示不断变化的行为,但是上传和下载是两回事,我不认为这里的界面是合适的。
- 尝试这样的事情......
文件类:
class File{
private String fileName;
private String fileLocation;
public File(String fileName, String fileLocation){
this.fileName = fileName;
this.fileLocation = fileLocation;
}
//Getters for the above Field
public boolean setDownload(File f){
new Download(f); // Composition
}
public boolean setUpload(File f){
new Upload(f); // Composition
}
}
下载课程:
class Download{
private String fromDestination;
// Getter and Setter for above field
public boolean dowload(File f){
return false; // set to true if successful
}
}
上传课程
class Upload{
private String toDestination;
// Getter and Setter for above field
public boolean upload(File f){
return false; // set to true if successful
}
}
您可以使用Apache's commons
库进行文件上传和文件下载 ....