Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2017, 12:35   #1
SnapeEye
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 43
По умолчанию Непонятный ClassCastException

Доброго времени суток!

Подгружаю класс во время выполнения. Получаю следующую ошибку:
Exception in thread "main" java.lang.ClassCastException: plugin.Plugin cannot be cast to interfaces.IFigure

Не понимаю в чем проблема. В проекте есть пакет с интерфейсом - interfaces.IFigure. В подгружаемом .jar файле содержится пакет plugin, а в нем 2 файла: этот же скопированный с проекта интерфейс IFigure и класс Plugin, реализующий интерфейс IFigure.

Все сделано верно (пробовал на более простом примере с выводом строки в консоль), однако не понимаю, почему тогда не может "закастить" класс Plugin к интерфейсу IFigure, если он его имплементирует?

Подгружаемый класс имеет следующую сигнатуру:
Код:
public class Plugin implements IFigure
Более простой тестовый интерфейс (который "кастует" нормально):
Код:
package hello;
 
public interface IPlugin
{
    public void invoke();
}
Расширенный новый интерфейс (который отказывается "кастовать") выглядит так:
Код:
package plugin;
 
import java.awt.Color;
import java.awt.Point;
import java.util.List;
 
public interface IFigure
{
    String getBase64ImageIcon(); // Returns Base64 String with icon
    String getFigureName(); // Returns the name of the figure
    
    List<Point> getFigurePath(); // Returns the path of the figure (if necessary)
    
    int getWidth(); // Returns width of the figure
    int getHeight(); // Returns height of the figure
    int getBorder(); // Returns border width of the figure
    
    Color getFigureColor(); // Returns color of the figure
    Color getBorderColor(); // Returns border color of the figure
}
Часть кода подгрузки:
Проверено, что в режиме Debug "clazz" имеет значение "class plugin.Plugin"
Код:
for (Class clazz : pluginClasses)
{
    try
    {
        IFigure instance = (IFigure) clazz.newInstance();
        figures.add(new Figure(instance)); // не существенный шаг на данный момент, до него даже не доходит...
    }
    catch (InstantiationException e)
    {
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
    catch (IllegalAccessException e)
    {
        e.printStackTrace();
    }
}
Подскажите, пожалуйста, что это за магия или что не так?

Заранее благодарен за любую помощь и подсказки по решению данной проблемы!
SnapeEye вне форума Ответить с цитированием
Старый 03.11.2017, 12:51   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Может интерфейс не в том же package?

И вообще копировать вряд ли хорошая идея, сделайте библиотеку (jar).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 03.11.2017, 13:17   #3
SnapeEye
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 43
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Может интерфейс не в том же package?

И вообще копировать вряд ли хорошая идея, сделайте библиотеку (jar).
Всё точно было в нужных package, но не суть уже - сделал jar с интерфейсом - заработало. Чрезмерно благодарен! 2 дня мучался...
SnapeEye вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятный код С Yufos Общие вопросы C/C++ 2 20.04.2015 02:21
Непонятный глюк luk18 Microsoft Office Excel 3 01.09.2011 12:50
C# непонятный код raok Помощь студентам 4 21.05.2011 14:15
ClassCastException при разработке плагина igorDanilov Общие вопросы по Java, Java SE, Kotlin 0 14.10.2009 16:11