Seja bem vindo ao Fórum do JavaFree.org
Aqui você irá encontrar respostas para TUDO o que você precisa sobre java.
Deseja participar? Crie sua conta ou efetue seu login
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?
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)
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]
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)
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 !
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]
É 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.
duCoralPosts:282
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]
relchiPosts:6
Eu também estou interessado nisto.
Ainda não posso te ajudar, mas vou procurar sobre o assunto, assim que tiver algo, te aviso.
relchiPosts:6
...
relchiPosts:6
ainda não achei nada
ronaldtmPosts:2317
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)
duCoralPosts:282
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]
ronaldtmPosts:2317
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)
brainPosts:654
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 !
_________________
duCoralPosts:282