질문을 소개하는 예제를 만들었습니다.매개 변수로 파일 전달
public class Algorithm
{
// This is the best, but circumstances prevent me from doing this.
/*public static void computeSomething(Data data)
{
// Compute some stuff
}*/
public static void computeSomething(DataFileReader reader) throws IOException
{
// Compute some stuff.
}
public static void computeSomething(File file) throws IOException, DataFormatException
{
DataFileReader = DataFileReaderFactory.newDataFileReader(file);
// Compute some stuff.
}
}
public class DataFileReaderFactory
{
private enum FileExtension { XML, UNSUPPORTED_EXTENSION }
private static final String XMLExtension = ".xml";
public static DataFileReader newDataFileReader(File file) throws DataFormatException
{
switch(computeFileExtension(file))
{
case XML : return new XMLFileReader(file);
default : throw new DataFormatException();
}
}
private static FileExtension computeFileExtension(File file)
{
if(file.getName().endsWith(XMLExtension))
return FileExtension.XML;
else
return FileExtension.UNSUPPORTED_EXTENSION;
}
}
그래서, 나는 파일, 또는 데이터가 올바른 형식인지 확인 내 자신의 파일 리더를 취할 내 인터페이스를 정의해야하는지 알고 싶습니다. 분명히 데이터 자체를 데이터 개체로 사용할 수 있기를 원합니다. 그러나이 점에있어 제한적입니다. 그 이유는 데이터가 매우 크고 여러 객체에 대해 직렬화해야하기 때문입니다. 이 경우 데이터 자체가 아닌 데이터 경로를 보내는 것이 더 실용적입니다.
어쨌든 질문에 관해서는 Java의 파일 인 파일의 인스턴스를 취하는 메소드쪽으로 기울어 져 있지만 더 일반적인 것처럼 들리 겠지만 여러분의 조언을 듣고 싶습니다. 감사!
아쉽게도 스트림은 직렬화 할 수 없으므로 알고리즘에 필요한 요구 사항입니다. 테스트와 로컬 실행을 위해 위의 예에서 주석 처리 한 것과 같은 알고리즘 버전을 만들어 데이터를 직접 전달할 수 있습니다. –
귀하의 구현을 직렬화 할 수 ... –