Pergunta

O meu entendimento é que, a fim de manter a fonte de compatibilidade, Java não introduz novos métodos para interfaces públicas, como que as quebras de clientes que implementam as interfaces existentes. notas Java versão estados

Em geral, a política é a seguinte, Exceto por eventuais incompatibilidades listados mais abaixo:

  • versões de manutenção (tais como 1.4.1, 1.4.2) não introduzir quaisquer novos recursos de linguagem ou APIs. Elas vão manter a fonte-compatibilidade com uns aos outros.

  • lançamentos funcionalidade e grande versões (tais como 1.3.0, 1.4.0, 5.0) manter para cima, mas não para baixo source-compatibilidade.

No entanto, os pacotes java.sql e javax.sql continuar a evoluir e apresentar muitas mudanças incompatíveis. Por exemplo, eu notei as seguintes alterações incompatíveis (introduzidas no Java 6):

Você sabe como e por que esses métodos foi acrescentado? É java.sql ser tratado de forma diferente do resto da plataforma? Sabe da discussão / JSR em torno destas adições?

Foi útil?

Solução

Eu tenho a seguinte resposta de um Sun Developer

A política geral de evolução para APIs do JDK para lançamentos de funcionalidades como JDK 7 é

  1. Não quebre a compatibilidade binária (conforme definido no capítulo JLSv3 13)
  2. evitar a introdução de incompatibilidades fonte
  3. Gerir a mudança comportamental compatibilidade

(Para mais, muito mais do que você gostaria de ler sobre os diferentes tipos de Compatibilidade ver

"Tipos de Compatibilidade: Source, binário, e Comportamental" e "compatível Evolving BigDecimal"

Adicionando métodos para interfaces é binário compatível e source incompatíveis, por isso não é comumente feito. Geralmente, quanto mais amplamente implementado uma interface é, menos provável é que para adicionar métodos para isso. A área JDBC é uma exceção a esta política e usos looser atualizar regras, mas isso causa problemas reais quando as pessoas querem atualizar para uma nova versão JDK.

Outras dicas

Note que a adição de novos métodos só quebrar a compatibilidade fonte, implementações já compilados de Statement ou ResultSet em um driver JDBC continuará a ser executado em um JDK mais recente. Somente quando você tentar chamar um método novo que você vai ter um NoSuchMethodError.

Eles provavelmente assumir que fornecedores de driver de banco de dados que implementam esses métodos são manter-se atualizado com novos tempos de execução Java, e que é melhor para introduzir novos métodos úteis e temporariamente quebrar a compatibilidade.

Claro, eles poderiam ter projetado-lo melhor para que quebrar a compatibilidade não seria necessário ...

Sun nunca garante compatibilidade de origem entre os lançamentos, apenas a compatibilidade binária. O exemplo mais comum é que o código-fonte que contém 'assert' ou identificadores 'enum' não irá compilar sob JDK 1.4 (para assert) ou 1.5+ (para enum), mas arquivos existentes .class ainda será executado sob essas JVMs mais recentes.

Você pode tentar usar a bandeira -source para compilar arquivos .java mais velhos sob JVMs mais recentes, mas você ainda pode ter problemas se você está confiando em classes JVM que foram alterados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top