如何处理;不能强制转换为类“;错误-GSON JAVA

如何处理;不能强制转换为类“;错误-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

我试图在抽象模型中将我的列表写入jtable,然后它返回给我这个错误。在我看来,这可能是由列表格式引起的?姓名和金额放错了地方。这是我的完整错误消息: 线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常:无法将class com.google.gson.internal.LinkedTreeMap转换为class Model.Medicine(com.google.gson.internal.LinkedTreeMap和Model.Medicine位于加载程序“app”的未命名模块中)

有一个代码: 这是我的医学课

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列索引)
{
如果(columnIndex
PublicList 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;
}