抽象方法重写,在java中实现不同的返回类型

时间:2015-09-12 12:45:10

标签: java csv override abstract-class

我有一个抽象的Java类FileManager,它包含三种文件操作方法。

  1. openFile()
  2. abstract readFile()
  3. closeFile()

    我想在类FileManager中指定所有三种方法。但是,方法readFile()必须读取不同类型的文件。 viz csvxlsdoc。将来,代码甚至可能必须阅读PDF个文件。

  4. 所有此类调用的返回类型将有所不同。

    这意味着当我读取csv文件时,我将返回一个ArrayList,另一方面,xls文件将返回一个HashMap,依此类推。

    为了实现这一点,并使代码工厂兼容,我计划在项目中为每个fileType创建一个单独的reader类。 (CSVFileReaderDOCFileReaderXLSFileReader等。)

    有没有办法,我可以强迫开发人员在他的______(CSV / XLS / DOC)文件阅读器实现中包含readFile()方法?

    PS:Java定义子类中的重写方法应该具有相同的返回类型或子类型。我的问题是如何在readFile()实现中指定FileManager,并为每种不同类型的文件设置不同的返回类型?

2 个答案:

答案 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() {
        // ...
    }
}