Java类设计和异常处理

标签 java exception methods class-design ioexception

我的 getChoice() 方法从控制台获取一个字符输入并将该字符返回给 main()getChoice() 是否应该抛出异常并让 main() 处理它:

static char getChoice() throws IOException
{
    BufferedReader br = new 
    BufferedReader(new InputStreamReader(System.in));
    return (char)br.read();
}

或者应该 getChoice() 捕获异常,处理它并返回一个字符:

static char getChoice() 
{
    BufferedReader br = new 
    BufferedReader(new InputStreamReader(System.in));
    char temp;
    try {
        temp = (char)br.read();
    } catch(IOException exc) {
        System.out.println("Invalid Input");
        temp = (char)0;
    }
    return temp;
}

从设计的角度来看,哪种方法更好? 有更好的方法吗?

最佳答案

抛出异常对我来说似乎是更好的选择,因为在异常情况下返回默认值(或错误代码,如果你愿意)不会让调用者知道在读取用户输入时有错误.使用像 (char)0 这样的返回值作为错误代码会让您回到没有异常处理的语言。

也就是说,您应该考虑捕获 IOException 并抛出您自己的一些描述错误的异常。

例如:

static char getChoice() throws UserInputException
{
    BufferedReader br = new 
    BufferedReader(new InputStreamReader(System.in));
    char temp = (char)0;
    try {
        temp = (char)br.read();
    }
    catch (IOException ioEx) {
        throw new UserInputException ("Error reading input", ioEx);
    }
    return temp;
}

关于Java类设计和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26570812/

相关文章:

magento - 安装时缓存和 session 清理期间的异常 - magento 中的 Zopim 实时聊天扩展

c# - System.UnauthorizedAccessException(第一次机会异常)

java - 获取方法的类文件的绝对路径

java - 为什么 Serialized 被称为接口(interface)?

java - Android sdk-manager 与 php 冲突?

java - WebDav 服务器库最好是 Java

Java Scanner 无论如何都会被清除,如何防止这种情况发生?

java - 在 Java 8 中基于列表过滤 HashMap

java - 使用@WebFault 进行 JAX-WS 异常处理

java - 可能不正确调用 ArrayList 索引?