2009-11-20 57 views
0

結合閉包(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查詢。

+0

讓我直截了當......兩天前宣佈封閉將成爲Java的一部分,並且您希望這將如何影響創建JPA查詢?我認爲社區中的任何人都沒有制定FCM式關閉的影響。 – rtperson 2009-11-20 21:35:54

回答

2

您描述的代碼不使用閉包,但字段文字method literals)。像好的舊的class literal。這些可以幫助標準API。類型安全查詢接口的JPA 2 source code generation work-around可以替換爲它。 如果它將成爲JDK7的一部分。

+0

謝謝,我只想得到第二雙這樣的眼睛。通過「使用閉包」我的意思是與FCM一起出現的字面量。我當然希望Sun堅持這一提議,因爲它提供的不僅僅是關閉桌子。 – DragonFax 2009-11-21 05:15:18

1

正如托馬斯指出的那樣,這並不嚴格要求關閉。目前這一切都在起飛,因爲沒有人知道正在審議什麼提案。目前尚不清楚FCM是否真的是該提案的基礎,特別是考慮到斯蒂芬·科爾伯恩似乎對任何人都感到擔憂。

很多人都指出Neal Gafter's mysteriously-revised-more-or-less-right-as-the-Devoxx-presentation-announcing-closures-was-being-given spec作爲暗示什麼樣的封閉可能需要。請注意,修改後的建議看起來(美觀)與FCM相似!

該規範包括您引用的參考類型(在上面的'方法參考'中),當然FCM也是一樣的。是的,這肯定會讓你建議可能。在閱讀這篇文章時,我首先想到的是在這方面它會如何影響JPA/Hibernate,和/或我們自己的抽象層。在您的標準中使用類型安全,可重構的方法參考?地獄是的。

+0

方法文字(有一些約束條件)不易用記錄器實現(請參閱easyMock)。字段文字更難(參見JPA2)。沒有理由爲什麼方法和文字現在不在Java中。即使javadoc有他們。 – 2009-11-21 06:36:50