Pergunta

Combinando fechamentos (FCM) e genéricos, seria possível ter critérios totalmente seguros.

// The following works without a cast as Foo.id is a 'long' field.
List<Long> ids = session.createCriteria(Foo.class)
                        .setProjection(Foo#id)
                        .list();

// The following is a compilation error, as Foo.bar is defined as an int, and not a string
session.createCriteria(Foo.class)
       .addRestriction(Restrictions.eq(Foo#bar,"blah"))
       .list();

Eu li a especificação JPA 2.0 para critérios seguros de tipo. Mas ainda está um pouco falta.

Além disso, estou apenas usando os critérios aqui como um exemplo de melhoria do código de segurança em geral. Eu usei a digitação estática de Java fortemente para me deixar codificar mais rapidamente. Mas, como resultado, sou mordido de vez em quando pelas partes do meu código que ignoram a digitação. Por exemplo, consultas HQL.

Foi útil?

Solução

O código que você está descrevendo não usa fechamentos, mas Literais de campo (Método literais). Como o bom velho classe literal. Isso pode ajudar em uma API de critérios. o JPA 2 Código Fonte Generation-Around Para uma interface de consulta segura por tipo, pode ser substituída por ele. Se Fará parte do JDK7.

Outras dicas

Como Thomas aponta, isso não requer estritamente fechamentos. Está tudo no ar no momento, já que ninguém sabe exatamente qual proposta está sendo analisada. Não está claro se o FCM é realmente a base da proposta, principalmente porque Stephen Colebourne parecia estar tão suspeito quanto qualquer um sobre o anúncio.

Muitas pessoas estão apontando para Neal Gafter, misteriosamente revisado-mais ou menos, à direita-como-devoxx-apresentação-anúncios-closres-de-ser-riduda especifica como uma dica sobre o que o fechamento de forma pode levar. Lembre -se, a proposta revisada parece (esteticamente) como o FCM!

Essa especificação inclui o tipo de referência a que você se refere (em 'Referências do método' na linha acima) e, é claro, o FCM tem o mesmo. Sim, isso definitivamente faria você sugerir possível. Meu primeiro pensamento ao ler sobre isso foi como isso afetaria o JPA/Hibernate e/ou nossas próprias camadas de abstração no mesmo, a esse respeito. TypeAfe, referências de método refatorável em seus critérios? Isso aí.

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