Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли избавиться от унаследованного интерфейса? 
V
    Опции темы
Mirkes
Дата 6.8.2013, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Возникла странная проблема.
Внутри класса, наследованного от JPanel определил еще один внутренний класс, так же потомок от JPanel.
Получил предупреждение:
Non-static inner class should not be declared serializable
Я его и не объявлял  smile 
В общем то работать не мешает, но это предупреждение постоянно висит и раздражает.

Вопрос: можно ли заставить класс забыть об интерфейсе, реализованном у одного из предков?

Это сообщение отредактировал(а) Mirkes - 6.8.2013, 19:34


--------------------
Mirkes
PM MAIL   Вверх
Stolzen
Дата 6.8.2013, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Вряд ли можно рядовыми средствами. 
А почему нельзя его сделать static?


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Samotnik
Дата 6.8.2013, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Действительно странно, сделал как описано, такого предупреждения нет:
user posted image
PM MAIL   Вверх
Mirkes
Дата 7.8.2013, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Цитата(Stolzen @  6.8.2013,  20:41 Найти цитируемый пост)
А почему нельзя его сделать static? 

Нужно иметь доступ к полям внешнего класса.


Цитата(Samotnik @  6.8.2013,  20:49 Найти цитируемый пост)
Действительно странно, сделал как описано, такого предупреждения нет:

Ну у меня сходу возникла ошибка - нет такого метода main.
Это потому, что он не static

Если main сделать static, то сразу же вылезает следующая ошибка - нестатический вложенный класс может быть создан только в его облегающем классе.
Реально работающий вариант ниже:
Код

import javax.swing.JPanel;


public class New extends JPanel {
    
    class Inner extends JPanel {
        void test(){
            System.out.println("test inside");
        }
    }

    public New(){
        Inner inner = new Inner();
    inner.test();
    }
    
    public static void main(String[] arg) {
        System.out.println("test");
        New obj = new New();
    }

}


Компиляция проходит чисто и работает. А вот IDE кричит что
Serializable class "New" dose not declare a static final serialVersionUID field of type long.
Serializable class "Inner" dose not declare a static final serialVersionUID field of type long.

Если объявить (см ниже)

Код

import javax.swing.JPanel;


public class New extends JPanel {
    @SuppressWarnings("compatibility:1749611439303034006")
    private static final long serialVersionUID = -3346107518452065076L;

    class Inner extends JPanel {
        @SuppressWarnings("compatibility:3959673593591480817")
        private static final long serialVersionUID = 1L;

        void test(){
            System.out.println("test inside");
        }
    }

    public New(){
        Inner inner = new Inner();
    inner.test();
    }
    
    public static void main(String[] arg) {
        System.out.println("test");
        New obj = new New();
    }

}



Тогда IDE начинает кричать
Non-static inner class should not be declared serializable

И вот такой замкнутый круг.
Все работает, но это раздражает. Кроме того, это свидетельствует о том, что что-то неправильно или не совсем правильно. Не могу понять, как разрулить ситуацию.


--------------------
Mirkes
PM MAIL   Вверх
Pawl
Дата 7.8.2013, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Вот здесь описана похожая проблема.

Это сообщение отредактировал(а) Pawl - 7.8.2013, 16:22


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Mirkes
Дата 7.8.2013, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Всем спасибо.
Я понял, что потерять унаследованный интерфейс никак нельзя  smile 
А по поводу сериализации внутреннего не статического класса я понял следующее:
1. Поскольку он сериализован одним из предков, то если я не укажу константу serialVersionUID, то это сделает компилятор.
А моя IDE (JDeveloper) сходит с ума из-за противоречия. С одной стороны класс сериализован и надо требовать с пользователя константу.
С другой стороны класс вложенный и не статический, следовательно сериализоваться будет только с внешним классом и интерфейс сериализации ему не нужен.

Поскольку с сериализацией JPanel мне не справиться, придется терпеть этот балет сомнение у IDE.

На форуме оракла советуют указывать константу.


--------------------
Mirkes
PM MAIL   Вверх
Pawl
Дата 7.8.2013, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Цитата(Mirkes @  7.8.2013,  11:41 Найти цитируемый пост)
Тогда IDE начинает кричатьNon-static inner class should not be declared serializableИ вот такой замкнутый круг.

Ну так смените IDE. В Idea 12 оба варианта Вашего кода компилятся без пыли и шума.


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
Samotnik
Дата 7.8.2013, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Mirkes, Понятно, что мой код не компилится smile
Суть моего предыдущего поста показать, что по описанным тобой шагам такого предупреждения нет.  
PM MAIL   Вверх
Mirkes
Дата 8.8.2013, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Цитата(Samotnik @  7.8.2013,  21:03 Найти цитируемый пост)
Mirkes, Понятно, что мой код не компилится 
Суть моего предыдущего поста показать, что по описанным тобой шагам такого предупреждения нет.   


Я неправильно выразился. Не предупреждение, а постоянное напоминание IDE о некорректности текста.
Как я уже понял, оба текста не соответствуют строгим канонам, но куда деваться.


Цитата(Pawl @  7.8.2013,  17:42 Найти цитируемый пост)
Ну так смените IDE. В Idea 12 оба варианта Вашего кода компилятся без пыли и шума. 

Совет, конечно, хороший, но есть нюансы.
Во первых IDE права.
Во вторых и в JDeveloper все компилируется и работает. Просто постоянные пометки о некорректности раздражают.
В третьих, JDeveloper freeware от оракла, а Idea - платная. Я сейчас работаю в Британии и не могу себе позволить пользоваться не лицензионным софтом, покупать мне Idea никто не будет, а за свои - жаба давит. Так что смена IDE не такая простая штука.

Это сообщение отредактировал(а) Mirkes - 8.8.2013, 14:27


--------------------
Mirkes
PM MAIL   Вверх
Stolzen
Дата 9.8.2013, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Конечно я бы мог порекомендовать использовать Eclipse, но он точно так же выдаваёт ворниниг, если класс наследуется от Serializable и не определяет константу. 
Для себя я проблему решил тем, что отрубил этот ворнинг и забыл про него smile


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Pawl
Дата 13.9.2013, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



Нашел аннотацию для подавления этого предупреждения:
Код

@SuppressWarnings("serial")
 помечаешь класс и радуешься жизни  smile 


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.