簡體   English   中英

Freemarker 和 java8 默認方法?

[英]Freemarker and java8 default methods?

我們最近開始在接口中使用java 8默認方法,看起來Freemarker看不到它們:

${myRatings.notEmpty()}

The following has evaluated to null or missing:
==> myRatings.notEmpty

這很遺憾,因為我們在模板中調用了一堆方法。 這個問題有方法解決嗎? 也許一些補丁?

互聯網主要談論 getFoo() 默認方法,這確實沒有多大意義,但我說的是常規方法調用,而不是 getter。

更新: FreeMarker 2.3.26 為此引入了一種解決方法。 引用自版本歷史

FREEMARKER-24 :添加了解決方法(默認情況下未啟用)以將 Java 8 默認方法(以及它們定義的 bean 屬性)暴露給模板,盡管java.beans.Introspector (官方 JavaBeans 內省器)忽略它們,至少從 JRE 開始1.8.0_66。 要啟用此解決方法,請增加用於 2.3.26 的DefaultObjectWrapperBeansWrapperincompatibleImprovements構造函數參數的值,或將其treatDefaultMethodsAsBeanMembers設置設置為true 請注意,如果您將Configurationobject_wrapper設置保留為默認值,則將ConfigurationincompatibleImprovements設置增加到 2.3.26 就足夠了,因為它是由默認object_wrapper繼承的。

原答案:

Freemarker 如何看待對象基於 JavaBeans 規范,這是許多 Java 技術的基石。 它使用java.beans.Introspector內省類以確保一致性。 顯然,JavaBeans 不支持 Java 8 默認方法。 BeanInfo.getMethodDescriptors()不返回默認方法,我們在BeanInfo.getPropertiesDescriptors()和 getter 中也有同樣的問題。 我不知道為什么標准 Java API(或 JavaBeans)的維護者會做出這樣的決定……當然,Freemarker 遲早要進行額外的自省以解決這些 JavaBeans 的限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM