猿问

Java:ClassCastException-无法将java.lang.Class强制转换为

所以我得到了


ClassCastException:无法将java.lang.Class强制转换为com.glostrode.Management.Link


在以下方法(文件的第32行)中指示的行上,发生异常的行:


public Link getLink(String name) {

    txtFile f = new txtFile("plugins/PrimeManager/linksList.txt");

    List<String> lines = f.getLines();

    int i;

    txtFile f2;

    for(i=0; i<lines.size(); i++){

        f2 = new txtFile("plugins/PrimeManager/links/"+lines.get(i)+".txt");

        if(f2.getLines().isEmpty()) {

            return null;

        }

        Object o = f2.getObject();

        Link li = (Link) o;// THIS LINE HERE

        if(li.name == lines.get(i)){

            return li;

        }

    }

    return null;

}

该getLines()方法返回,其中List<String>包含txtFile对象的初始化指定的文件中的行。该getObject()方法如下:


public Object getObject(){

        try {

            FileInputStream i = new FileInputStream(this.file);

            ObjectInputStream o = new ObjectInputStream(i);

            Object r = o.readObject();

            o.close();

            i.close();

            return r;

        } catch (IOException | ClassNotFoundException e) {

            e.printStackTrace();

        }

        return null;

    }

}

根据我目前的理解,所返回的对象o.readObject()应可转换为其原始形式(读取的文件包含一个Link对象)。


我使用以下方法将其添加到文件中:


public void addObject(Object obj){

    try {

        FileOutputStream f = new FileOutputStream(this.file);

        ObjectOutputStream o = new ObjectOutputStream(f);

        o.writeObject(obj);

        o.flush();

        o.close();

        f.close();

    } catch (IOException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

    }

}

txtFile构造函数:


public txtFile(String path) {

        this.path = path;

        this.file = new File(path);

        if(!this.file.exists()){

            try {

                this.file.createNewFile();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

}


狐的传说
浏览 289回答 2
2回答

白板的微信

好的,问题在于您如何调用addObject方法。由于您是使用Link.class调用的,因此它仅返回Class对象。不能转换为Link li =(Link)o上的Link相反,只需传递Link对象。addObject(l)其中l是Link的对象

慕尼黑的夜晚无繁华

lf.addObject(l.getClass());你写一个Class对象,你得到一个Class对象。改为执行以下操作:lf.addObject(l);
随时随地看视频慕课网APP

相关分类

Java
我要回答