Página Inicial do Fórum > Java Avançado

Modificador transient



Criar novo tópico   Responder tópico


  1. duCoral
    Posts:282


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Olá!

    Estava olhando a nova implementação (jdk 1.5) da classe javax.swing.event.EventListenerList e fiquei curioso quanto ao seguinte:

    Declaração da variável listenerList

    Implementação do método getListenerCount


    Observe que a variável lList recebe a referência de listenerList para depois ser utilizada como parâmetro no método getListenerCount. Alguém saberia dizer porque a variável listenerList não foi utilizada diretamente como parâmetro neste caso? Ou seja:


    Será que isto tem alguma coisa relacionada ao fato de a variável listenerList ter sido declarada com o modificador transient?

    Obrigado.


    _________________
    Carlos Eduardo Coral
    JavaFree.org

    "Any sufficiently refined abstraction is indistinguishable from magic." [source lost]




  1. relchi
    Posts:6


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Eu também estou interessado nisto.
    Ainda não posso te ajudar, mas vou procurar sobre o assunto, assim que tiver algo, te aviso.




  1. relchi
    Posts:6


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    ...




  1. relchi
    Posts:6


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    ainda não achei nada




  1. ronaldtm
    Posts:2317


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    O modificador transient pode ser usado apenas em atributos, e indica que ele não deve ser incluído na serialização do objeto. Por exemplo, numa classe



    Se você serializar o objeto em disco, o atributo 'a' será gravado, mas o 'b' não. Ao carregar o objeto de volta à memória, o atributo 'b' terá seu valor igual a null. Exemplo:



    Este código vai imprimir


    Isto é, o objeto perde o valor dos atributos transient na serialização.



    'E por que eu ia querer perder algum dado?' você pode se perguntar. Bem, isso pode ter vários usos.

    Alguns atributos podem ser reconstruídos a partir dos outros, e provavelmente existem só por questão de performance, pra não ficar recalculando tudo toda vez. Neste caso, podemos economizar a ocupação em disco eliminando o atributo da serialização.

    Outro caso é quando um atributo simplesmente não pode ser serializado, como um Socket ou um Graphics, por exemplo. Só podem ser serializados objetos que implementem a interface Serializable, e o método de serialização default determina que todos os atributos do objeto também implementem Serializable ou então sejam marcados como transient.
    _________________
    In fact, people who study design methods without also practicing design are almost always frustrated designers who have no sap in them, who have lost, or never had, the urge to shape things. Such a person will never be able to say anything sensible about "how" to shape things either. (Christopher Alexander)




  1. duCoral
    Posts:282


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Obrigado ronaldtm.

    Mas a minha dúvida realmente é sobre o motivo da declaração da variável lList no método getListenerCount? Por que ela foi declarada?
    _________________
    Carlos Eduardo Coral
    JavaFree.org

    "Any sufficiently refined abstraction is indistinguishable from magic." [source lost]




  1. ronaldtm
    Posts:2317


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Ah sim, esqueci...

    Provavelmente foi por questão de padrão de codificação, porque não faz diferença nenhuma colocar direto na chamada do método.
    _________________
    In fact, people who study design methods without also practicing design are almost always frustrated designers who have no sap in them, who have lost, or never had, the urge to shape things. Such a person will never be able to say anything sensible about "how" to shape things either. (Christopher Alexander)




  1. brain
    Posts:654


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    A classe EventListenerList implementa os métodos writeObject(ObjectOutputStream) e readObject(ObjectInputStream), que são os métodos chamados por reflexão no momento de serializar um objeto.

    Note que nesta implementação ele trata a forma com que ele armazena esta lista transiente, por isso ele declarou como transiente, opinião minha pelo menos !




    Isso aí, flow !
    _________________





  1. duCoral
    Posts:282


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    ronaldtm
    Ah sim, esqueci...

    Provavelmente foi por questão de padrão de codificação, porque não faz diferença nenhuma colocar direto na chamada do método.



    Não sei não. Ainda penso que há outro motivo, pois está muito redundante.

    Bom, acho que Georges Saab, Hans Muller e James Gosling (autores da classe) estavam afim de 'tirar onda" com a cara de curiosos como o autor deste tópico.
    _________________
    Carlos Eduardo Coral
    JavaFree.org

    "Any sufficiently refined abstraction is indistinguishable from magic." [source lost]




  1. jack_-_ganzha
    Posts:4191


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    É apenas uma questão de codificação mesmo, as vezes eu faço isso tambem, mas não faz diferença alguma e não tem relação com o fato de ser transiente ou não.

    valeuz...
    _________________
    Marcos Silva Pereira




  1. miojo
    Posts:1358


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    eles soh fizeram isso pra diminuir o tamanho da variável...

    de 'listenerList' pra 'lList', pra evitar de estourar 80 colunas...




  1. Relacionados





Novo tópico   Responder tópico     Índice do forum -> Java Avançado