Java 这可以简化为方法吗?
我有这个异常处理代码。我想知道它是否可以简化为方法,而不是将其全部放在主方法中。或者单独上课会更好吗?非常感谢Java 这可以简化为方法吗?,java,exception-handling,Java,Exception Handling,我有这个异常处理代码。我想知道它是否可以简化为方法,而不是将其全部放在主方法中。或者单独上课会更好吗?非常感谢 import java.util.Scanner; import java.io.*; class ReadWrite { public static void main(String args[]) { try { File myFile = new File("fruits.txt"); Scanner sc
import java.util.Scanner;
import java.io.*;
class ReadWrite {
public static void main(String args[]) {
try {
File myFile = new File("fruits.txt");
Scanner sc = new Scanner(System. in );
FileWriter fw = new FileWriter(myFile, true);
PrintWriter pw = new PrintWriter(fw);
String fn = "";
while (!fn.equals("exit")) {
System.out.println("Please enter the fruit name or enter exit");
fn = sc.nextLine();
if (!fn.equals("exit")) {
pw.println(fn);
}
}
pw.close();
Scanner readFile = new Scanner(myFile);
int i = 1;
while (readFile.hasNextLine()) {
System.out.println(i + ": " + readFile.nextLine());
i++;
}
readFile.close();
} catch (Exception e) {
e.printStackTrace(); //shows all problems in list
}
}
}
据
单一责任原则->每件“事情”都应该有单一责任。
因此,简短的回答是肯定的,你可以,你应该,长答案:
class ReadWrite
{
public static void main(String args[])
{
DataRequester dataRequester = new DataRequester(new ConsolePrinter());
String myFileName = "fruits.txt";
FruitWriter fruitWriter = new FruitWriter();
FruitPrinter fruitPrinter = new FruitPrinter(new ConsolePrinter());
fruitWriter.writeFruits(dataRequester, myFileName);
fruitPrinter.printFruitsFrom(myFileName);
}
}
interface Printer
{
void print(String string);
}
class FileWriterFactory
{
public FileWriter createFrom(String path)
{
try
{
return new FileWriter(path, true);
} catch (IOException e)
{
throw new RuntimeException(e);
}
}
}
class ConsolePrinter implements Printer
{
@Override
public void print(String string)
{
System.out.println(string);
}
}
class DataRequester
{
private final Printer printer;
DataRequester(Printer printer)
{
this.printer = printer;
}
public void requestForDataOf(String type)
{
printer.print(String.format("Please enter the %s name or enter exit", type));
}
}
class FruitWriter{
public void writeFruits(DataRequester dataRequester, String myFileName)
{
FileWriter fw = new FileWriterFactory().createFrom(myFileName);
Scanner sc = new Scanner(System.in);
PrintWriter pw = new PrintWriter(fw);
String fn = "";
while (shouldExit(fn))
{
dataRequester.requestForDataOf("fruit");
fn = sc.nextLine();
if (shouldExit(fn))
{
pw.println(fn);
}
}
pw.close();
}
private static boolean shouldExit(String fn)
{
return !fn.equals("exit");
}
}
class FruitPrinter{
private final Printer printer;
FruitPrinter(Printer printer)
{
this.printer = printer;
}
public void printFruitsFrom(String path){
Scanner readFile = new Scanner(path);
int line = 1;
while (readFile.hasNextLine())
{
printer.print(String.format("Line %s: %s", line, readFile.nextLine()));
line++;
}
readFile.close();
}
}
显然,这需要分为文件,每个类的文件。
注意,现在一切都清楚了。
通过阅读主要的方法,我了解了这个应用程序,我确切地知道除了从它做什么。
它写水果。
然后打印出来
从哪里来?去哪里?
我不在乎。
如果我在乎的话,我会查看实现
另外,请查看打印机的分离情况。
我的打印机不知道他打印到哪里,他也不需要知道。
我给了他一台打印机,打印机知道如何打印,这才是最重要的。
如果明天我想使用文件打印机,我会更改这一行:
FruitPrinter fruitPrinter = new FruitPrinter(new ConsolePrinter());
到
没有人会知道其中的区别!
这是SOLID的另外两个原则,OCP和DIP,我建议你阅读它们。这个问题似乎离题了,因为它是关于代码审查(try)。关于
“我想知道它是否可以简化为方法,而不是将其全部放在主方法中”
--回答:是的,但你应该是那个尝试这样做的人。主要的方法应该是简短的,并且应该主要是让你的程序启动并运行,而不是其他什么。关于,“或者单独的类更好吗?”
——通常程序不仅仅有文件IO,文件IO应该与程序的其他部分分开,是的,在单独的类中,通常在单独的包中。
FruitPrinter fruitPrinter = new FruitPrinter(new FilePrinter());