java - 实现一个目标,两种目的

标签 java oop

这是我想知道如何做的事情,但找不到适合该问题的方法。

假设我有一个可以用于两个目的的类:上传和下载。本能地,我会创建一个类似这样的对象:

public class File{
 private FormFile uploadFile;
 private File downloadFile;
 private String uploadLocation;
 private String downloadLocation;

 //setters and getters
}

问题是,我只想为每种类型拥有一组访问器。例如,类中只有一个setFile(Object obj)。但这会导致问题,因为 FormFile 和 File 是两个不同的对象。

然后我会求助于 OOP。将我的对象更改为:

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

时反之亦然

我并不是真的想解决这个问题。只是一个想法。

最佳答案

尝试使用泛型:

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

关于java - 实现一个目标,两种目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12728874/

相关文章:

java - 在 while 循环内将 ArrayList 添加到 TreeMap

Perl,Moose - 子类不继承父类(super class)的方法

c++ - 工资单项目中的 fstream 问题

java - Java中通过super继承子类变量

php - 从未知对象属性构建数组

c++ - 按指定顺序绘制形状

java - 使用 CREATE_NEW_PROCESS_GROUP 创建主机时,将 Ctrl+C 发送到子进程

java - 流口水:不区分大小写比较?

java - JTextField 输入无法更新 MVC 中 TextView 中的输出

Java/mongodb - 如何实现聚合方法以将结果作为游标返回