JAVA "cannot be cast to java.lang.String"

标签 java

我正在尝试创建一个列表并将我的书籍数组输出到其中,并让用户能够单击其中一本书来租用它。该列表有效,它输出所有书籍,但是当我单击一本书并选择“确定”时,它会给出错误“线程“main”java.lang.ClassCastException 中的异常:书籍无法转换为 java.lang.String”。有人可以向我解释这个错误是什么以及如何修复它吗?

public static void CustomerBooks() throws IOException {
    Object[] Menu = {
            "Option1",
            "Option2",
            "Option3",
            "Option4"
    };
    String userChoice = (String) JOptionPane.showInputDialog(null, "Welcome", "Book Menu", JOptionPane.QUESTION_MESSAGE, null, Menu, null);
    if (userChoice.equals("Option1")) {} else if (userChoice.equals("Option2")) {
        File myFile = new File("books.txt");
        Scanner inputFile = new Scanner(myFile);
        Books[] bookArray = new Books[200];
        String str;
        while (inputFile.hasNext()) {
            str = inputFile.nextLine();
            String[] myData = str.split("#");
            Books.addBook(bookArray, Books.getBookCount(), myData[0], myData[1], myData[2]);
        }
        inputFile.close();
        String userChoice1 = (String) JOptionPane.showInputDialog(null, "Books List", "Books", JOptionPane.QUESTION_MESSAGE, null, bookArray, null);
        JOptionPane.showMessageDialog(null, "You chose: " + userChoice1); {
            System.exit(0);
        }
    }

最佳答案

java中有一个toString()方法,可以在任何对象上调用。但是,如果您想根据您的 Book 的特征获得此方法的适当行为,您应该像 Ibukun 的答案一样重写它。

强制转换概念用于获取更具体类型的对象。因此,由于这本书不是 Stringinstance,因此您在运行时会得到 ClassCastException

关于JAVA "cannot be cast to java.lang.String",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36437359/

相关文章:

java - 在java中将String转换成时间格式

java - 在linux机器上从java执行mysql数据库导入脚本

java - 从 Java 调用 Kotlin(找不到符号)

java - 如何用EJB实现永久后台进程?

java - 如何在 Java 中表示 Oracle Interval

java - 单例异常有效吗?

java - 多个子类,如何实例化其中的任何一个?

java - antlr4 跨模式共享规则

java - 在 Linux 中使用 MATLAB (Windows) 生成的 Java 包

java - 在 hibernate 查询的连接中返回的对象类型是什么