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.
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!
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.
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]
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!
[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!