замыкания означают полностью типобезопасные критерии?

StackOverflow https://stackoverflow.com/questions/1773221

Вопрос

комбинируя замыкания (FCM) и обобщения, можно ли будет иметь полностью типобезопасные критерии.

// 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();

Я прочитал спецификацию JPA 2.0 для критериев типобезопасности.Но его все еще чего-то не хватает.

Кроме того, я использую здесь критерии просто как пример улучшения типобезопасности кода в целом.Я активно использовал статическую типизацию Java, чтобы кодировать быстрее.Но в результате меня время от времени кусают те части моего кода, которые игнорируют ввод текста.Например, запросы HQL.

Это было полезно?

Решение

Код, который вы описываете, не использует замыкания, но литералы полей (литералы метода).Как старый добрый литерал класса.Это может помочь в API критериев.А Обходной путь генерации исходного кода JPA 2 для типобезопасного интерфейса запроса можно заменить его. Если это будет часть JDK7.

Другие советы

Как указывает Томас, это не обязательно требует замыканий.На данный момент все это висит в воздухе, поскольку никто точно не знает, какое предложение рассматривается.Неясно, является ли FCM основой этого предложения, особенно если учесть, что Стивен Коулборн, похоже, был удивлен этим объявлением не меньше остальных.

Многие люди указывают на Таинственно переработанная-более-менее правильная, как презентация Devoxx, объявляющая о закрытии, была дана. как подсказка относительно того, какую форму могут принимать замыкания.Имейте в виду, пересмотренное предложение выглядит (эстетически) очень похоже на FCM!

Эта спецификация включает в себя те ссылки, на которые вы ссылаетесь (в разделе «Ссылки на методы» в строке выше), и, конечно, FCM имеет то же самое.Да, это определенно сделает ваше предложение возможным.Моя первая мысль, когда я читал об этом, заключалась в том, как это повлияет на JPA/Hibernate и/или наши собственные уровни абстракции в этом отношении.Типобезопасные, рефакторируемые ссылки на методы в ваших критериях?Черт возьми, да.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top