"Extensão" de classe

Olá pessoal,

Pessoal, baixei um JAR com código-fonte opensource e quero alterar uma classe.

Na realidade quero incluir coisas simples, uns getters e setters pra facilitar minha vida, e outras funções básicas.

Entretanto, como devo proceder?

Eu inclui o JAR no meu projeto no Netbeans e fiz uma cópia da classe e implementei os métodos q preciso.

Mas na hora de rodar, é evidente q ganhei uma Exception. O Java reclama que as funções q estou chamando não existem…

Como posso fazer pra “apagar” a classe que tem no JAR e utilizar a minha exterior?

[]'s

Já que o código é aberto, baixe o projeto deles, altere o que precisar, empacote num jar usando o build deles, e substitua o jar deles com o teu customizado.

[youtube][quote=jaycwb]Olá pessoal,

Pessoal, baixei um JAR com código-fonte opensource e quero alterar uma classe.
Na realidade quero incluir coisas simples, uns getters e setters pra facilitar minha vida, e outras funções básicas.
Entretanto, como devo proceder?
Eu inclui o JAR no meu projeto no Netbeans e fiz uma cópia da classe e implementei os métodos q preciso.
Mas na hora de rodar, é evidente q ganhei uma Exception. O Java reclama que as funções q estou chamando não existem…
Como posso fazer pra “apagar” a classe que tem no JAR e utilizar a minha exterior?
[]'s
[/quote]

Por que não extender a classe ao invés de altera-la? Isso que vc está fazendo é uma péssima prática, pois qualquer alteração no projeto original afetaria diretamente a sua implementação!

Essa dica foi de sacanagem, né?

Esse tipo de prática vai fazer com que ele não possa nunca mais atualizar a biblioteca, sem que ter também fazer merge de todas as mudanças. Sem falar, que joga por água abaixo todas as garantias dos testes dos desenvolvedores originais.

Melhor é criar uma extensão ou, ainda melhor que isso, criar classes helpers, decoradoras ou mediadoras.

Essa dica foi de sacanagem, né?

Esse tipo de prática vai fazer com que ele não possa nunca mais atualizar a biblioteca, sem que ter também fazer merge de todas as mudanças. Sem falar, que joga por água abaixo todas as garantias dos testes dos desenvolvedores originais.

Melhor é criar uma extensão ou, ainda melhor que isso, criar classes helpers, decoradoras ou mediadoras.[/quote]

:smiley: Concordo! Pior que já vi muito disso acontecendo e não só em java, pois o cara quer alterar parte do funcionamento e ai necessita de acesso a campos privados, etc. Mesmo assim não justifica e é a maior dor de cabeça depois. Nada que um pouco mais de trabalho não resolva!

Minha idéia original foi exatamente de estender as classes.

Mas a questão é que como preciso fazer uns gets para atributos privados, não vou conseguir, só se fossem protected.

[quote=jaycwb]Minha idéia original foi exatamente de estender as classes.

Mas a questão é que como preciso fazer uns gets para atributos privados, não vou conseguir, só se fossem protected.[/quote]

Bom, se eles são privados pq você não deveria de maneira nenhuma acessa-los! Acredito que utilizar o padrão Decorator não vai resolver pois você tem que praticamente reescrever a classe dentro dele, uma alternativa, se a classe implementa uma interface é implementar essa interface com o código da classe já existente só adicionando os novos métodos. Mas acredito que isso não seja uma boa prática.

Mas explique melhor que campos são esses que você quer acessar e pq deseja faze-lo, quem sabe não podemos encontrar uma solução!