gpt4 book ai didi

java - 调用自定义异常类

转载 作者:行者123 更新时间:2023-12-01 18:09:54 26 4
gpt4 key购买 nike

我目前正在尝试在 BlueJ 中完成一个项目。我有一个 ReadWrite 类和一个 InvalidFileException 类。

我希望从 InvalidFileException 类调用 toString() 方法到 writeToFile()< 中的 ReadWrite 方法。

readWrite 只能处理以 .txt 结尾的文件。一旦 boolean 值完成并找到一个不以 .txt 结尾的文件,它应该返回我的自定义异常类。

writeToFile 方法检查 boolean 值是否存在文件类型;如果没有,它应该返回我创建的 InvalidFileException

我相信我需要在 else 语句之后调用它,但我没有运气弄清楚它。

这是我的代码。

读写类:

public boolean writeToFile() {
boolean ok;

try {
FileWriter writer = new FileWriter(file);
{
if (file.toLowerCase().endsWith(".txt")) {
ok = true;
write();
} else {
ok = false;

}
}

} catch (IOException e) {
ok = false;
}
}

InvalidFileExceptionClass *****

import java.io.FileNotFoundException;

public class InvalidFileException extends Exception {

/**
* Constructor for objects of class InvalidFileException
*/
public InvalidFileException(String message) {
super(message);
}

public String toString() {
return ("Sorry but this system only accepts .txt files");
}
}

最佳答案

这里有几个问题。

首先,你不“调用”异常;你一个。使用 throw 关键字可以轻松实现这一点。 boolean 值在这里完全无关紧要。

接下来,您的自定义异常扩展Exception,这意味着它已被检查。你要么必须自己接住它,要么宣布它被抛出。您不想在这里捕获它,但您希望调用者来处理它。这也可以通过 throws 关键字轻松实现。

最后,您不想完全覆盖 toString ,完全忽略您传入的消息。除了您的消息之外,合并提供的消息将是一个更好的设计,但我离开这个决定由你决定。

这一切看起来会是这样的:

public boolean writeToFile() throws InvalidFileException {
try {
FileWriter writer = new FileWriter(file);
if (file.toLowerCase().endsWith(".txt")) {
write();
} else {
throw new InvalidFileException("this message is completely ignored");
}
} catch (IOException e) {
throw e; // something bad has happened and the exception should propagate
}
}

无论调用此方法的是什么,都必须将其包装在自己的 try...catch 中:

try {
readWriteInstance.writeToFile();
} catch (InvalidFileException e) {
System.out.println(e.toString());
}

关于java - 调用自定义异常类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33815815/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com