如何处理;不能强制转换为类“;错误-GSON JAVA
我试图在抽象模型中将我的列表写入jtable,然后它返回给我这个错误。在我看来,这可能是由列表格式引起的?姓名和金额放错了地方。这是我的完整错误消息: 线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常:无法将class com.google.gson.internal.LinkedTreeMap转换为class Model.Medicine(com.google.gson.internal.LinkedTreeMap和Model.Medicine位于加载程序“app”的未命名模块中) 有一个代码: 这是我的医学课如何处理;不能强制转换为类“;错误-GSON JAVA,java,json,gson,jtable,Java,Json,Gson,Jtable,我试图在抽象模型中将我的列表写入jtable,然后它返回给我这个错误。在我看来,这可能是由列表格式引起的?姓名和金额放错了地方。这是我的完整错误消息: 线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常:无法将class com.google.gson.internal.LinkedTreeMap转换为class Model.Medicine(com.google.gson.internal.LinkedTreeMap和Model.Medic
public class Medicine {
private String name;
private String amount;
public Medicine( String amount, String name){
this.name = name;
this.amount = amount;
}
public String getName() {return name;}
public void setName(String name){this.name = name;}
public String getAmount(){return amount;}
public void setAmount(String amount){this.amount = amount;}
}
这是我的转换代码:
public List<Medicine> FromJsonToArray() throws IOException {
String medicineJson = initArray("Medicines.json").toString();
Gson gson = new Gson();
List<Medicine> medicineArray = gson.fromJson(medicineJson, List.class);
return medicineArray;
}
我的json:
[
{
"amount": "123",
"name": "Ibuprofen"
},
{
"amount": "333",
"name": "Ketonal"
}
]
最后,表模型类出现错误:
public class MedicineTableModel extends AbstractTableModel {
private List<Medicine> medicines;
private String[] columns;
public MedicineTableModel(List<Medicine> aMedicineList){
super();
medicines = aMedicineList;
columns = new String[]{"Name", "Amount"};
}
@Override
public int getRowCount() {
return medicines.size();
}
@Override
public int getColumnCount() {
return columns.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex)
{
if (columnIndex<medicines.size())
{
Medicine c= medicines.get(rowIndex); <---- there is a problem :O
if(rowIndex == 0) {
return(c.getName());
}
}
return null;
}
public String getColumnName(int col) {
return columns[col] ;
}
}
公共类MedicineTableModel扩展了AbstractTableModel{
私人名单药物;
私有字符串[]列;
公共药物表模型(列出美国医生名单){
超级();
药物=美国医生;
columns=新字符串[]{“Name”,“Amount”};
}
@凌驾
public int getRowCount(){
返回药品。大小();
}
@凌驾
public int getColumnCount(){
返回列的长度;
}
@凌驾
公共对象getValueAt(int行索引、int列索引)
{
如果(columnIndexPublicList FromJsonToArray()引发IOException{
字符串medicineJson=initArray(“Medicines.json”).toString();
Gson Gson=新的Gson();
Type medicineListType=new-TypeToken(){}.getType();
List medicineArray=gson.fromJson(medicineJson,medicineListType);
返回药物阵列;
}
我们应该做到这一点
基本上,这是一种让gson反序列化到特定类列表的解决方法
这是必需的,因为泛型在运行时丢失,并且您的json被反序列化到List
而不是List您可以修复方法getValueAt
?目前至少缺少一个关闭}
。好的,现在可以尝试像gson.fromJson一样反序列化列表了(medicineJson,new TypeToken(){}.getType());
或gson.fromJson(medicineJson,TypeToken.getParameterized(List.class,Medicine.class).getType());
。请参见。我应该在FromJsonToArray方法中实现它?与类强制转换异常无关。我认为您在getValueAt
中混淆了索引检查
public class MedicineTableModel extends AbstractTableModel {
private List<Medicine> medicines;
private String[] columns;
public MedicineTableModel(List<Medicine> aMedicineList){
super();
medicines = aMedicineList;
columns = new String[]{"Name", "Amount"};
}
@Override
public int getRowCount() {
return medicines.size();
}
@Override
public int getColumnCount() {
return columns.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex)
{
if (columnIndex<medicines.size())
{
Medicine c= medicines.get(rowIndex); <---- there is a problem :O
if(rowIndex == 0) {
return(c.getName());
}
}
return null;
}
public String getColumnName(int col) {
return columns[col] ;
}
}
public List<Medicine> FromJsonToArray() throws IOException {
String medicineJson = initArray("Medicines.json").toString();
Gson gson = new Gson();
Type medicineListType = new TypeToken<List<Medicine>>() {}.getType();
List<Medicine> medicineArray = gson.fromJson(medicineJson, medicineListType);
return medicineArray;
}