我有两种方法可以将文本写入文本文件。除了他们写的filepath
之外,这两种方法几乎完全相同。这是我的两个代码。
public class WriteFileTeacher {
private String filename="/mylocation/teachers.txt";
public void writeToFileTeacher (String course) {
try (FileWriter fw = new FileWriter(filename, true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
out.println(course);// this is what gets saved
} catch (IOException e) {
}
}
}
public class WriteFileCourse {
private String filename="/mylocation/courses.txt";
public void writeToFileCourse (String course) {
try (FileWriter fw = new FileWriter(filename, true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
out.println(course);// this is what gets saved
} catch (IOException e) {
}
}
}
由于两种方法除了路径名之外几乎完全相同,我一直在寻找关于如何编写抽象类的建议,这两个类都可以扩展吗?
答案 0 :(得分:1)
public class FileWriter {
private final String fileName;
public FileWriter(String fileName) {
this.fileName = fileName;
}
public void writeToFile() {
// your source is this.fileName
}
}
由于writeToFileTeacher
方法的相同性,在这种情况下您不需要类层次结构。只需创建一个以文件名作为参数的构造函数,这意味着您的编写者应该写入的位置。
这是写入文件的常用类,不用担心方法命名,只需将其命名为writeToFile
。
答案 1 :(得分:0)
文件名值可以是来自具体子类的私有信息。
因此,使用参数传输此信息可能是不可取的。
为什么不将这两种方法放在一起,因为它们做同样的事情? 您可以使用私有方法对公共处理进行分解。
{{1}}
答案 2 :(得分:0)
我认为最好的方法可能就是这样:
public class MyAbstractWriterClass {
protected abstract String getFilePath();
public void writeToFileTeacher(String course){
try (FileWriter fw = new FileWriter(getFilePath(), true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
out.println(course);// this is what gets saved
} catch (IOException e) {
}
}
}
或者您可以创建一个类来写入任何文件,只传递String内容并将此writer类作为参数传递给yout主类(如策略模式):
class GenericFileWriter {
private final filePath;
GenericFileWriter(String file) {
this.filePath = file;
}
public void write(String content) {
try (FileWriter fw = new FileWriter(this.filePath, true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw)) {
out.println(course);// this is what gets saved
} catch (IOException e) {
}
}
}