我有一个抽象的Java类FileManager
,它包含三种文件操作方法。
openFile()
abstract readFile()
closeFile()
我想在类FileManager
中指定所有三种方法。但是,方法readFile()
必须读取不同类型的文件。 viz csv
,xls
,doc
。将来,代码甚至可能必须阅读PDF
个文件。
所有此类调用的返回类型将有所不同。
这意味着当我读取csv文件时,我将返回一个ArrayList,另一方面,xls文件将返回一个HashMap,依此类推。
为了实现这一点,并使代码工厂兼容,我计划在项目中为每个fileType创建一个单独的reader类。 (CSVFileReader
,DOCFileReader
,XLSFileReader
等。)
有没有办法,我可以强迫开发人员在他的______(CSV / XLS / DOC)文件阅读器实现中包含readFile()
方法?
PS:Java定义子类中的重写方法应该具有相同的返回类型或子类型。我的问题是如何在readFile()
实现中指定FileManager
,并为每种不同类型的文件设置不同的返回类型?
答案 0 :(得分:1)
您可能希望将其用作返回类型。这将允许您即时选择返回类型。
public <T> T mymethod(T type)
{
return type;
}
这是关于在Oracle中使用Java中的泛型类型的简要教程。 https://docs.oracle.com/javase/tutorial/java/generics/types.html
答案 1 :(得分:0)
只需使用通用性:
public abstract class FileManager<OUPUT> {
public abstract OUTPUT readFile();
}
public class CSVFileReader extends FileManager<List<String>> {
@Override
public List<String> readFile() {
// ...
}
}
public class XLSFileReader extends FileManager<Map<String, String>> {
@Override
public Map<String, String> readFile() {
// ...
}
}