抽象方法重写,在 java 中实现不同的 return 类型
Abstract method Overriding, implementing a different return type in java
我有一个摘要Java class FileManager
,其中包含三种文件操作方法。
openFile()
abstract readFile()
closeFile()
我想在classFileManager
中指定所有三个方法。但是,方法 readFile()
将不得不读取不同类型的文件。即 csv
、xls
、doc
。将来代码甚至可能需要读取 PDF
个文件。
所有此类调用的 return 类型都将不同。
这意味着当我读取 csv 文件时,我将 return 一个 ArrayList ,另一方面 xls 文件将 return 一个 HashMap ,等等。
为了实现这一点,并使代码工厂兼容,我计划在项目中为每个文件类型创建一个单独的 reader class。 ( CSVFileReader
, DOCFileReader
, XLSFileReader
等 )
有什么方法可以强制开发人员在他的 ______(CSV/XLS/DOC)Filereader 实现中包含 readFile()
方法?
PS: Java 定义 subclass 中重写的方法应该具有相同的或 return 类型的子类型。我的问题是如何在 FileManager
实现中指定 readFile()
并为每种不同类型的文件设置不同的 return 类型?
只需使用泛型:
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() {
// ...
}
}
您可能希望用作 return 类型。这将使您可以即时选择 return 类型。
public <T> T mymethod(T type)
{
return type;
}
这是 Oracle 在 java 中使用泛型类型的简短教程。
https://docs.oracle.com/javase/tutorial/java/generics/types.html
我有一个摘要Java class FileManager
,其中包含三种文件操作方法。
openFile()
abstract readFile()
closeFile()
我想在class
FileManager
中指定所有三个方法。但是,方法readFile()
将不得不读取不同类型的文件。即csv
、xls
、doc
。将来代码甚至可能需要读取PDF
个文件。
所有此类调用的 return 类型都将不同。
这意味着当我读取 csv 文件时,我将 return 一个 ArrayList ,另一方面 xls 文件将 return 一个 HashMap ,等等。
为了实现这一点,并使代码工厂兼容,我计划在项目中为每个文件类型创建一个单独的 reader class。 ( CSVFileReader
, DOCFileReader
, XLSFileReader
等 )
有什么方法可以强制开发人员在他的 ______(CSV/XLS/DOC)Filereader 实现中包含 readFile()
方法?
PS: Java 定义 subclass 中重写的方法应该具有相同的或 return 类型的子类型。我的问题是如何在 FileManager
实现中指定 readFile()
并为每种不同类型的文件设置不同的 return 类型?
只需使用泛型:
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() {
// ...
}
}
您可能希望用作 return 类型。这将使您可以即时选择 return 类型。
public <T> T mymethod(T type)
{
return type;
}
这是 Oracle 在 java 中使用泛型类型的简短教程。 https://docs.oracle.com/javase/tutorial/java/generics/types.html