2016-12-12 1 views
3

사용자 정의 요구 사항 (예 : AWSFile 또는 GoogleCloudStorageFile (예 : 인수 용))을 갖는 하위 클래스 java.io.File에 대한 내 아이디어가 싫은 다른 개발자와 토론 할 예정입니다. listFiles(), getAbsoluteFile 등의 메소드 중 일부를 재정의하십시오. 언제 서브 클래스 java.io.File에 괜찮습니까?java.io.File을 하위 클래스로 만드는 것은 나쁜 생각입니까?

는 왜 더 일반적인 될 수 있도록 구현 될 수있는 java.io.File, 예를 들어, 거기에이에 대한 일반적인 인터페이스입니까? 이것은 의도적으로 그렇게 되었습니까?

이전에 다른 API에서 본 것처럼 내 접근 방식이 실제로 좋았는지 또는 좋지 않은지 이해하고 싶습니다. (올바르게 리콜하면 동일한 접근 방식을 사용했습니다.) TrueZip 얼마 전에).

불꽃 전쟁, 또는 아무것도를 시작하는 것이 아니라, File 엔티티 (AWSFile, JDBCFile 등)의 다양한 유형을 구현하는 방법의 예를 얻을 수 잠재적으로 프로의 의미 목록을이 질문의 목적 단점.

+3

"javadoc의 첫 번째 줄에는"파일 및 디렉토리 경로명의 추상 표현 "이 있습니다. 이것은 사용자의 필요에 맞게 서브 클래스를 만드는 데 이상적인 클래스처럼 들립니다. 내 주요 관심사는 아마 구름 파일과 같은 무언가에 적용되지 않을 방법 중로드 및 메서드 중 하나를 상속해야한다는 것입니다. 보다 깔끔한 접근법은 java에 존재하지 않는''File'' 인터페이스를 구현하는 것입니다. 그래서 ... 계속 토론하십시오 : D – f1sh

+1

당신의 접근 방식이 좋다고 말할 것입니다. – Jobin

+0

서브 클래스 할 필요가 없습니다. 하위 클래스 화없이 원하는 경우 해당 메소드를 구현할 수 있습니다. 상속은 IS-A를 의미합니다. 여기서는 그렇지 않습니다. – duffymo

답변

-1

서브 단단히 슈퍼 클래스에 결합 될 것이다, 당신의 코드가 약한 것입니다. 가능한 경우 상속 전에 위임을 시도해야합니다.

public class YourFileWrapper { 

private File yourFile; 


public File getYourFile() { 
    return yourFile; 
} 
//rest of your code 
+1

상속에 대해 "약한"것이 무엇인지 이해하지 못합니다. 따라서 나는 상속보다 위임을 선호해야하는 이유를 알지 못합니다. – f1sh

+0

이미 설명한 바와 같이 "하위 클래스는 수퍼 클래스에 밀접하게 결합됩니다" – karthik

+0

예, 상속의 의미입니다. 그것에 대해 나쁜 점은 무엇입니까? 그리고 그것이 나쁘다면 모든 프로젝트에서 모든 언어 언어로 상속이있는 이유는 무엇입니까? – f1sh

0

내 개인적인 취향은 인터페이스 RemoteFile을하고 당신이 거기 원격 파일에 필요한 방법을 구현하는 것이 될 것이다. 그것에서

난 당신이 원격 받고 파일을 설정하기 위해 필요한 모든 방법의 유형을 넣어 제안했다.

public interface RemoteFile { 
    public File getLocalFile(); 
    public String getRemotePath(); 
    public boolean isDirectory(); 
    public List<RemoteFile> listFiles(); 
    ... etc... 
} 
+0

왜 이걸 주 겠소? 찬성/반대 의견은 무엇입니까? 왜 이것이 더 나은 접근법으로 간주되어야 하는가? OP는 논쟁적인 ansawer를 찾는 것 같습니다. – tftd

관련 문제