我是Java编程的新手,我想我很清楚这些对象是什么以及如何使用它们。
但是,由于我正在编写程序,所以我注意到我对方法使用了很多“静态”关键字,并且我怀疑这是否是因为它确实是必要的和合乎逻辑的,还是因为我没有在我看来,OO概念是内部化的。
更具体地说,我的程序应从txt文件读取并将每一行放入ArrayList中,这是我的代码:
public class FileBody {
private static final String SEPARATOR = ";";
private static String headerField1 = "regex";
private static String headerField2 = "origin";
private static String headerField3 = "destination";
private static final String HEADER = headerField1 + SEPARATOR + headerField2
+ SEPARATOR + headerField3 + SEPARATOR;
// Getters & setters
public static String getHeader() {
return HEADER;
}
public static String getHeaderField1() {
return headerField1;
}
public static void setHeaderField1(String headerField1) {
FileBody.headerField1 = headerField1;
}
public static String getHeaderField2() {
return headerField2;
}
public static void setHeaderField2(String headerField2) {
FileBody.headerField2 = headerField2;
}
public static String getHeaderField3() {
return headerField3;
}
public static void setHeaderField3(String headerField3) {
FileBody.headerField3 = headerField3;
}
// End getters & setters
public static File createFileIfNotExists(String path) throws IOException {
File file = new File(path);
if (file.createNewFile());
return file;
}
public static File getFile(String path) throws IOException {
File file = createFileIfNotExists(path);
return file;
}
public static boolean isEmpty(File file) throws Exception {
FileReader fileReader = new FileReader(file);
if (fileReader.read() != -1) {
fileReader.close();
return false;
} else {
fileReader.close();
return true;
}
}
public static void writeHeaderToEmptyFile(File file) throws Exception {
if (isEmpty(file)) {
BufferedWriter bufferedWriter = new BufferedWriter(
new FileWriter(file, false));
bufferedWriter.write(HEADER);
bufferedWriter.close();
} else {
return;
}
}
public static ArrayList<String> getLines(File file) throws Exception {
ArrayList<String> lines = new ArrayList<>();
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
while (bufferedReader.ready()) {
lines.add(bufferedReader.readLine());
}
bufferedReader.close();
return lines;
}
}
您认为我可以用对象做得更好吗?如果答案是肯定的,您能给我指导方针吗?
非常感谢您的帮助。
最佳答案
应尽可能避免具有可变的静态字段。特别是,您只能使用一次,因此无法使用。
// only run once even if these fields are changed.
private static final String HEADER = headerField1 + SEPARATOR + headerField2
+ SEPARATOR + headerField3 + SEPARATOR;
您最想要的是
public static String getHeader() {
return headerField1 + SEPARATOR + headerField2
+ SEPARATOR + headerField3 + SEPARATOR;
}
应为
static
的唯一字段是SEPARATOR
,因为这是一个常量。我会尝试将所有其他字段都设置为非静态字段(以及它们的getter / setter)在课程的最后,您有一些实用程序/帮助程序方法。我将它们放在另一个类中,因为它们似乎无关。也就是说,请为这些方法使用明确的实用工具类。例如
class FileBody {
public void writeHeaderToEmptyFile(File file) throws IOException {
if (!FileUtils.isEmpty(file)) return
try (Writer w = new FileWriter(file)) {
w.write(getHeader());
}
}
}
class enum FileUtils {
/* no instances */ ;
// TODO replace all callers with new File(x);
public static File getFile(String filename) {
return new File(filename);
}
public static boolean isEmpty(File file) {
return file.length() > 0;
}
public static List<String> getLines(File file) throws Exception {
return Files.readAllLines(Paths.get(file.getAbsolutePath()));
}
}