Descontinuado vs. Denegrido no JavaDoc?

11

No JavaDoc para X509Certificate getSubjectDN()ele afirma:

Denegrido , substituído por getSubjectX500Principal ().

Estou acostumado a ver Preterido nos métodos que não devem mais ser usados, mas não Denegridos. Eu encontrei um relatório de bug sobre este caso específico, onde foi fechado com o comentário:

Isso não é um bug. "Descontinuado" deve ser usado apenas em casos graves.

Quando estamos usando um método que está obsoleto , a ação geral sugerida é parar de usar o método.

Então, qual é a ação sugerida quando um método é marcado como Denegrido ?

Jacob Schoen
fonte
2
Uau. Li as respostas e, embora tenha certeza de que são tecnicamente corretas, 'denegrido' é uma palavra terrível de se usar. Eles deveriam ter usado apenas 'Desanimado'. Não há necessidade de cuspir no código; um aviso seria suficiente.
Eric Rei
@Eric King Eu meio que me senti da mesma maneira. Eu estava pensando mais do que isso, se desanimado, apenas preteri-lo.
Jacob Schoen

Respostas:

9

A definição Merriam-Webster de denegrir sugere:

1: atacar a reputação de: difamar <denegrir os oponentes>
2: negar a importância ou a validade de: menosprezar <denegrir suas realizações>

Com base no que está escrito em outro bug relacionado, difame / menosprezo parece coincidir com a intenção do texto usado nos javadocs - ID do bug: 4959744 Denigrar X509Certificate.getSubjectDN () & co :

Os métodos getSubjectDN () e getIssuerDN () em X509Certificate e getIssuerDN () em X509CRL são problemáticos . Eles retornam uma classe não especificada implementando a interface java.security.Principal, que possui uma especificação muito flexível.

Como nenhuma especificação adicional está presente nos métodos getSubjectDN () e getIssuerDN (), é permitido que as implementações retornem uma classe específica de implementação arbitrária. A experiência do mundo real mostrou que esse é o caso, resultando em não portabilidade ou falta de confiabilidade do código. Por motivos de compatibilidade, as especificações para esses métodos não podem ser alteradas e devem ser consideradas não salvas.

Os métodos de substituição getSubjectX500Principal () & co que retornam uma instância da classe X500Principal bem definida foram adicionados no JDK 1.4. As implementações desses métodos foram projetadas para evitar todos os problemas desse tipo. No entanto, os novos métodos sofrem de subexposição e os programadores continuam a usar os métodos getSubjectDN () & co familiares e mais intuitivamente chamados.

Para mudar isso, os antigos métodos getSubjectDN () e getIssuerDN () devem ser descontinuados. Isso garantirá que os desenvolvedores que usam esses métodos recebam um aviso de tempo de compilação ....

AVALIAÇÃO

... A preterição foi considerada inadequada neste caso. Em vez disso, comentários de advertência foram adicionados ao JavaDoc .


O fato de ler o Bug ID 5008142 deixou você confuso sobre esse material "denegrido" parece mais uma falha do desenvolvedor que lidou com ele.

Eles deveriam ter encontrado o bug 4959744 e encaminhá-lo em sua avaliação, em vez de uma declaração vaga "destinada a ser usada apenas em casos graves". Eles provavelmente poderiam até fechar como duplicados, com justificativas como "A depreciação foi considerada, avaliada e rejeitada em favor da denigração, de acordo com o ID de bug 4959744" .

No mínimo, eles poderiam consultar o ID de bug 4959744 (talvez junto com 4638294 ) no campo Relatórios relacionados (chamado Consulte também no antigo bugs.sun.com iirc) do rastreador de erros. O fato de isso não ter sido feito faz com que se suspeite que eles não tenham procurado problemas relacionados.

mosquito
fonte
1
A parte mais difícil do @FrustratedWithFormsDesigner foi descobrir como inserir "denegrido" na página de pesquisa da Oracle, para que os resultados sejam filtrados para "bugs.sun.com". O resto foi fácil, acabei de verificar alguns resultados de pesquisa que apareceram. "Denegrir" é uma boa palavra bonita para procurar :)
mosquito
1
Veja, eu usei o Google para encontrar o primeiro, mas não me deu os outros. Eu provavelmente deveria ter olhado mais. Obrigado
Jacob Schoen
@jschoen Acho que isso não é culpa sua; I expandiu uma resposta sobre isso
mosquito
4

Depois de mais algumas pesquisas, consegui encontrar um post chamado Deprecation no JDK . Basicamente, afirma que as coisas marcadas como obsoletas são consideradas prejudiciais para serem usadas e que algumas são simplesmente desencorajadas.

A política geral de várias liberações de recursos é que os componentes principais do JDK são marcados como obsoletos se forem ativamente prejudiciais. Se o uso de uma classe ou método é apenas desaconselhável, isso geralmente não é suficiente para obter a marca obsoleta.

Ele mencionou que atualmente existe uma maneira de marcar um item como desencorajado de usar, mas que eles podem eventualmente adicionar uma maneira de fazer isso.

Em algum momento, esse tipo de conselho pode ser formalizado com um recurso de "denigração" menos prejudicial do que reprovado, com base em uma combinação de tags e anotações javadoc para permitir que verificações programáticas sejam feitas para o uso desses elementos API menos prejudiciais.

Embora eu não possa encontrar mais nada especificamente sobre uma decisão de usar o termo Denigrado, isso parece bem próximo. E com base nisso, parece que a ação que um desenvolvedor deve executar é a mesma que Descontinuada , não use o método

Jacob Schoen
fonte