我一直在开发这个简单的Java程序,在某种程度上它抛出了一个“ClassCastException”,我不知道为什么。程序中发生的事情是,它读取2个文本文件,并将它们存储在对象数组列表中(因为我使用相同的方法读取这两个文件)
稍后,当我尝试将这些对象转换为我创建的自定义数据类型时,程序会抛出此错误。我做错了什么?
public void staffFunctions() {
ArrayList<Object> staffs = TextFileHandler.readFile(staffText,userState);
for(Object obj: staffs) {
Staff staff = (Staff) obj;
if (staff.getUsername().equals(username) && staff.getPassword().equals(password)) {
staffMenu(staff);
} else {
System.out.println("Username/Password Invalid.");
}
}
}
^^这需要与员工相关的菜单。
ArrayList<Object> clients = TextFileHandler.readFile(accText, userState);
System.out.print("Enter Client Username > ");
String usernameClient = input.next();
System.out.print("Enter amount > ");
int amount = input.nextInt();
for(Object objs: clients) {
Customer customer = (Customer) objs;
if(customer.getUsername().equals(usernameClient)){
ClientFunctions.withdraw(customer, username, amount);
} else {
System.out.println("Invalid Client Username!");
}
}
^^这就是我得到异常的地方,就在“客户客户=(客户)目标”
我有两个班,客户和员工。它在运行时抛出“线程中的异常”main“java.lang.ClassCastException:Staff不能转换为Customer”。编译时没有问题。
readFile方法//更新
public static ArrayList<Object> readFile(String fileName, int userState) {
String line = null;
ArrayList<Object> elements = new ArrayList<>();
try {
fileReader = new java.io.FileReader("src/" + fileName);
bufferedReader = new BufferedReader(fileReader);
while ((line = bufferedReader.readLine()) != null) {
String element[] = line.split(" ");
if (userState == 1) {
Customer customer = new Customer(element[1], element[3], element[5], element[7], element[9], element[11]);
elements.add(customer);
} else {
Staff staff = new Staff(element[1], element[3]);
elements.add(staff);
}
}
bufferedReader.close();
} catch (FileNotFoundException ex) {
System.out.println("Unable to open file '" + fileName + "'");
} catch (IOExcepthtml" target="_blank">ion ex) {
System.out.println("Error reading file '" + fileName + "'");
}
return elements;
}
我做错了什么?提前谢谢。
ArrayList<Object> clients = TextFileHandler.readFile(accText, userState);
因此,客户机包含对象类型的元素。
在for循环中,当您尝试将对象(属于对象类型)强制转换为客户时,会发生ClassCastException。
Customer customer = (Customer) objs;
为了使转换成功,必须确保要转换的对象是子类的实例。如果超类对象不是子类的实例,则会发生运行时ClassCastException。这可以通过使用instanceof运算符来确保。
这里有一个例子可以让事情变得更清楚:
Object o = new Circle();
(Circle)o.getRadius(); // No exception at this point
也不例外。原因是,具体类型为圆形。
现在,您的案例有点像:
Object o;
(Circle)o.getRadius(); // Exception is thrown at this line
由于您的对象列表中只有两种类型的数据类型(
Staff和
Customer),所以在进行类型转换之前,您可以使用
instanceof操作符,如下所示-
for( Object obj : staffs){
if(obj instance of Staff){
Staff staff = (Staff) obj;
}
if(obj instance of Customer){
Customer Customer = (Customer) obj;
}
...
}
我的web-config.xml是
null 因此,具有外部依赖关系的作业可以正常工作,但是UDF会产生上面的错误。我还试图将我的应用程序jar(其中包含驱动程序和spring代码以及worker中已经存在的所有其他依赖项)添加到worker中的dependencies文件夹中,但仍然会产生错误。还试图将其放置在worker中与驱动程序相同的位置,并使用“spark.jars”将其位置添加到sparkConf,但没有成功。有什么建议
用编译后,我尝试用java运行,它运行了,但随后抛出了一个
无法从Git bash运行以下命令。我在错误以下; Git版本:Git版本2.28.0.Windows.1操作系统:Windows10
Html代码: 结果: 在com.example.tests.finalizepo.main(finalizepo.java:41)的org.openqa.selenium.support.ui.webdriverwait.timeoutexception(webdriverwait.java:80)直到(fluentwait.java:261)由:org.openqa.selenium.nosu