java.lang.ClassCastException:java.lang.String不能强制转换为Panels.AddNewClientSaveAction
当我运行下面的代码时,出现以下错误: 运行: 整个错误是:java.lang.ClassCastException:java.lang.String不能强制转换为Panels.AddNewClientSaveAction,java,arraylist,Java,Arraylist,当我运行下面的代码时,出现以下错误: 运行: 整个错误是: run: java.lang.ClassCastException: java.lang.String cannot be cast to Panels.AddNewClientSaveAction Before at Database.FileUpdate.main(128 | Oli | Much FileUpdate.java:40) 128 | Oli | Much 128 | Francis Kariuki | Mah
run:
java.lang.ClassCastException: java.lang.String cannot be cast to Panels.AddNewClientSaveAction
Before
at Database.FileUpdate.main(128 | Oli | Much
FileUpdate.java:40)
128 | Oli | Much
128 | Francis Kariuki | Mahia
128 | Francis Kariuki | Mahia
LASTSTUDENTEENTRYLINENNAMES
BUILD SUCCESSFUL (total time: 4 seconds)
我试图创建一个功能,在一个特定的文本“LastStudentEntryLineNames”之前,将一个新用户添加到一个文本文件中
下面是添加新用户“Eddys Rockery”前后的示例
之前:
123 | Oliver | Muchai
456 | Revilo | Chamu
LASTSTUDENTEENTRYLINENNAMES
之后:
123 | Oliver | Muchai
456 | Revilo | Chamu
678 | Eddys | Rockery
LASTSTUDENTEENTRYLINENNAMES
到目前为止,该代码仍然有效。我已经指出了错误产生的原因
提前感谢大家的帮助和建议
import Panels.AddNewClientSaveAction;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Stack {
public static final String LAST_STUDENT_LINE = "LASTSTUDENTEENTRYLINENNAMES";
public static StringBuilder line;
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(128);
List<AddNewClientSaveAction> objectInputFieldsList = new ArrayList<>(25);
AddNewClientSaveAction values = new AddNewClientSaveAction();
objectInputFieldsList.addAll(values.rayArrayList());
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("/D:/TestFile.DAT/"));
String text = null;
while ((text = br.readLine()) != null) {
if (sb.length() > 0) {
sb.append("\n");
}
sb.append(text);
}
System.out.println("Before");
System.out.println(sb);
// The Error's here: for (AddNewClientSaveAction s : objectInputFieldsList)
for (AddNewClientSaveAction s : objectInputFieldsList) {
int insertIndex = sb.indexOf(LAST_STUDENT_LINE);
line = new StringBuilder(128);
line.append(s.objectGUID).append(" | ").append(s.userGUID).append("\n");
sb.insert(insertIndex, line.toString());
}
System.out.println("\nAfter");
System.out.println(sb);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException exp) {
}
}
try{
java.io.FileWriter fstream = new java.io.FileWriter("/D:/TestFile.DAT/");
BufferedWriter outobj = new BufferedWriter(fstream);
outobj.write(sb.toString() + "\n");
outobj.close();
}catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
}
在数组列表objectInputFields列表中,您正在以下方法中添加字符串
public ArrayList actionPerformed () {
.....
.....
objectGUID = "1452";
userGUID = "90378";
firmGUID = "3663287";
.....
.....
// Add to list
objectInputFieldsList.add(objectGUID);
objectInputFieldsList.add(userGUID);
objectInputFieldsList.add(firmGUID);
objectInputFieldsList.add(postalCode);
.....
.....
}
您正在尝试使用AddNewClientSaveAction类进行循环,这肯定会导致java.lang.ClassCastException:java.lang.String无法强制转换到面板。AddNewClientSaveAction
错误
public static void main(String[] args) {
.......
.......
// The Error's here: for (AddNewClientSaveAction s : objectInputFieldsList)
for (AddNewClientSaveAction s : objectInputFieldsList) {
int insertIndex = sb.indexOf(LAST_STUDENT_LINE);
line = new StringBuilder(128);
line.append(s.objectGUID).append(" | ").append(s.userGUID).append("\n");
sb.insert(insertIndex, line.toString());
}
.......
.......
}
方法
StackAddClientSaveAction.rayArrayList()
返回包含String
对象的原始ArrayList
在类Stack
中,您正在将带有String
对象的列表添加到objectInputFieldsList
,该列表应该包含AddNewClientSaveAction
对象,而不是String
对象。当你试图编译时,编译器会给你一个警告;你忽略了警告
然后循环查看objectInputFieldsList
,并尝试将其包含的值分配给s
,类型为AddNewClientSaveAction
:
for (AddNewClientSaveAction s : objectInputFieldsList) {
您会得到一个ClassCastException
,因为列表包含String
对象,而不是AddNewClientSaveAction
对象
解决方案:不要将
String
对象添加到列表中。不要忽略编译器警告;它们出现是有原因的。请始终发布堆栈跟踪,而不仅仅是错误消息。它确定了问题所在的特定行,如果您在复制/粘贴中注意到该行,您将更有可能得到有用的响应。此外,问题似乎是,在objectInputFieldsList
中添加String
s会造成堆污染,但您尚未发布AddNewClientSaveAction\rayaryList()
的代码。我是JAVA新手。你能补充一些我如何解决这个问题的见解吗?
public static void main(String[] args) {
.......
.......
// The Error's here: for (AddNewClientSaveAction s : objectInputFieldsList)
for (AddNewClientSaveAction s : objectInputFieldsList) {
int insertIndex = sb.indexOf(LAST_STUDENT_LINE);
line = new StringBuilder(128);
line.append(s.objectGUID).append(" | ").append(s.userGUID).append("\n");
sb.insert(insertIndex, line.toString());
}
.......
.......
}
for (AddNewClientSaveAction s : objectInputFieldsList) {