Fabio Ramon wrote:
>
> Einar,
>
> Infelizmente eu tambem so' consigo imaginar a solucao que voce chamou de
> pessima. Alias, se o atributo _bos pode
> ser estático, talvez ele não precise ser atributo da classe e você pode
> simplesmente o alocar:
>
> super(new ByteArrayOutputStream());
>
> isso nao serve para voce ?
Isso não serve, porque se eu fizer desse jeito, não tenho mais
como acessar mais a instância de ByteArrayOutputStream que eu estou
repassando para a classe base. Eu preciso manter uma referência a essa
instância para usá-la depois em um outro método novo da minha classe.
E quanto ao truque do atributo static, na solução 3 ele era
usado apenas como temporário, mas no final do construtor esse valor
era copiado para a variável de instância. Mas como eu já disse em
outro email, usar static é uma má idéia.
Portanto obrigado também pela tentativa, mas o problema
continua em aberto...
Um abraço,
Einar Saukas
Technical Consultant
Summa Technologies, Inc.
http://www.summa-tech.com
> Einar Saukas wrote:
> >
> > Oi pessoal!
> >
> > Encontrei um problema interessante no projeto em que estou
> > trabalhando, será que alguém tem alguma sugestão? Minha intenção
> > era fazer uma classe assim, só que não funciona:
> >
> > class MessageOutputStream extends ObjectOutputStream {
> > private ByteArrayOutputStream _bos;
> > MessageOutputStream() throws java.io.IOException {
> > super(_bos = new ByteArrayOutputStream()); // ERRO!
> > }
> > }
> >
> > Todas as outras soluções semelhantes que eu consegui imaginar
> > também não funcionam, como essa por exemplo:
> >
> > class MessageOutputStream extends ObjectOutputStream {
> > private ByteArrayOutputStream _bos;
> > MessageOutputStream() throws java.io.IOException {
> > ByteArrayOutputStream tmp = new ByteArrayOutputStream();
> > super(tmp); // ERRO!
> > _bos = tmp;
> > }
> > }
> >
> > Na verdade, existe uma única variante que funciona, mas é
> > uma péssima solução:
> >
> > class MessageOutputStream extends ObjectOutputStream {
> > static ByteArrayOutputStream tmp;
> > private ByteArrayOutputStream _bos;
> > MessageOutputStream() throws java.io.IOException {
> > super(tmp = new ByteArrayOutputStream());
> > _bos = tmp;
> > }
> > }
> >
> > Por isso, a solução que eu acabei adotando foi deixar parte
> > da inicialização para ser feita pelo "cliente" da classe:
> >
> > class MessageOutputStream extends ObjectOutputStream {
> > private ByteArrayOutputStream _bos;
> > MessageOutputStream(ByteArrayOutputStream bos)
> > throws java.io.IOException {
> > super(bos);
> > _bos = bos;
> > }
> > }
> >
> > Em todo caso, se alguém tiver alguma idéia de como implementar
> > minha intenção original, eu agradeço. Eu acho que não tem muito jeito,
> > mas não custa nada perguntar...
> >
> > Um abraço,
> >
> > Einar Saukas
> > Technical Consultant
> > Summa Technologies, Inc.
> > http://www.summa-tech.com
--------------------------- LISTA SOUJAVA ---------------------------
http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
[para sair da lista: http://www.soujava.org.br/forum/cadastrados.htm]
---------------------------------------------------------------------