0

これはどうしようかと思っていたのですが、問題に合った方法が見つかりませんでした。

アップロードとダウンロードという 2 つの目的を果たすことができるクラスがあるとします。本能的に、次のようなオブジェクトを作成します。

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

 //setters and getters
}

問題は、タイプごとにアクセサーのセットを 1 つだけにしたいということです。たとえばsetFile(Object obj)、クラスに 1 人しかいません。ただし、FormFile と File は 2 つの異なるオブジェクトであるため、これは問題を引き起こします。

次に、OOPに頼ります。オブジェクトを次のように変更します。

public interface File{
 public void setFile(Object obj);
 public Object getFile();
 public void setLocation;
 public String getLocation;
}

次に、他の 2 つのオブジェクトを作成します。

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

私は本当にこれについて何かを解決しようとはしていません。ちょっとした考え。

4

3 に答える 3

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" ) );
于 2012-10-04T14:04:55.290 に答える
0

あなたはそれを考えすぎています。

次の 2 つのメソッドを追加するだけです。

public void setUploadFile(FormFile f);

public void setDownloadFile(File f);
于 2012-10-04T14:05:47.817 に答える
0

- Interface主にロールを提供する目的、または変化し続ける動作を表す目的で使用されますが、アップロードとダウンロードは 2 つの異なるものであるため、ここではインターフェイスが適切ではないと思います。

-このようなことを試してみてください...

ファイル クラス :

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にライブラリを使用できます....

于 2012-10-04T14:14:19.310 に答える