Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java tools & IDE's > Warning в Eclipse


Автор: almagnit 8.5.2008, 21:02
В эклипсе пишу такой код:

Код

import java.awt.*;


public class test extends Frame{

    public test() {
        init();
    }

    void init(){
        setBounds(100, 100, 300, 200);
        setVisible(true);
    }
    
    public static void main(final String[] args) {
        new test();
    }

}


Получаю Warning:

The serializable class test does not declare a static final serialVersionUID field of type long

объясните причину ...

Автор: Samotnik 8.5.2008, 21:09
названия классов и конструкторов с большой буквы писать надо

Добавлено @ 21:10
вот это работает без предупреждений 
Код

import java.awt.*;
public class Test extends Frame{
    public Test() {
        init();
    }
    void init(){
        setBounds(100, 100, 300, 200);
        setVisible(true);
    }

    public static void main(final String[] args) {
        new Test();
    }
}

Автор: powerOn 8.5.2008, 21:23
Цитата(almagnit @  8.5.2008,  22:02 Найти цитируемый пост)
The serializable class test does not declare a static final serialVersionUID field of type long

объясните причину ... 


Причина в настройках твоей IDE. 

Меню Windows -> Preferences -> Узел Java -> Узел Compiler -> Узел Errors/Warnings -> Potential Programming Problems -> Serializable class without serialVersionUID - Поставь Ignore.

Цитата(Samotnik @  8.5.2008,  22:09 Найти цитируемый пост)
вот это работает без предупреждений 

Samotnik, у тебя просто этот Warning отключён. Твой код никакого решения не показывает.  smile 

Автор: Samotnik 8.5.2008, 21:26
Цитата(powerOn @  8.5.2008,  21:23 Найти цитируемый пост)
Твой код никакого решения не показывает

окошко пусток показал 

Автор: v2v 8.5.2008, 21:27
Цитата(almagnit @  8.5.2008,  21:02 Найти цитируемый пост)


The serializable class test does not declare a static final serialVersionUID field of type long

твой класс наследует класс Frame, который в свою очередь реализует интерфейс Serializable.
интерфейс Serializable позволяет .. надеюсь ты это знаешь.
все классы которые реалиузуют Serializable требуют наличие приватного члена serialVersionUID.
Зачем? Вот причина из java доков: 
Цитата

serialVersionUID, which is used during deserialization to verify that the sender and receiver of a serialized object have loaded classes for that object that are compatible with respect to serialization.


Добавлено через 3 минуты и 41 секунду
Цитата(powerOn @  8.5.2008,  21:23 Найти цитируемый пост)
Поставь Ignore.

а ещё в ява доках написано, что значение по умолчанию не рекомендуется.

Добавлено через 3 минуты и 59 секунд
при использовании сериализации.

Автор: almagnit 8.5.2008, 21:36
Цитата(powerOn @  8.5.2008,  21:23 Найти цитируемый пост)
Samotnik, у тебя просто этот Warning отключён. Твой код никакого решения не показывает.


Не знаю на счет настроек, но написал с большой буквы не прокатило, варнинг остался

Цитата(v2v @  8.5.2008,  21:27 Найти цитируемый пост)
 требуют наличие приватного члена serialVersionUID


а если этого члена нет, чем это грозит ?

ЗЫ:

Сериализацию блин не глядел, а нужно ...  smile !

Автор: v2v 8.5.2008, 22:01
Цитата(almagnit @  8.5.2008,  21:36 Найти цитируемый пост)

а если этого члена нет, чем это грозит ?


If a serializable class does not explicitly declare a serialVersionUID, then the serialization runtime will calculate a default serialVersionUID value for that class based on various aspects of the class, as described in the Java™ Object Serialization Specification. However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization. Therefore, to guarantee a consistent serialVersionUID value across different java compiler implementations, a serializable class must declare an explicit serialVersionUID value. It is also strongly advised that explicit serialVersionUID declarations use the private modifier where possible, since such declarations apply only to the immediately declaring class--serialVersionUID fields are not useful as inherited members.

Автор: Maksym 9.5.2008, 00:53
Цитата(almagnit @  8.5.2008,  20:36 Найти цитируемый пост)
а если этого члена нет, чем это грозит ?

ЗЫ:

Сериализацию блин не глядел, а нужно ...

 +
Цитата(v2v @  8.5.2008,  21:01 Найти цитируемый пост)
an thus result in unexpected InvalidClassExceptions during deserialization.

= в твоем случае -- ничем не грозит.

Ни разу не сталкивался ни с одним проектом, в котором мы для всех сериализируемых классов было бы проставлено это поле.

Автор: almagnit 9.5.2008, 18:39
Спасибо за советы, с эклипсом уже подружился  smile 

После JBuilder'a эти Warnings как-то насторожили  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)