2012-11-12 49 views
0

我目前正在使用jodatime Java庫,並在嘗試在Coldfusion中使用它時遇到問題。coldfusion 9使用java對象

我已經下載了最新的jodatime 2.1版本,把jar文件放到一個文件夾我的本地驅動器上,並指出我的ColdFusion管理員看該文件夾中的ColdFusion的類路徑Java和JVM設置頁。

它的大部分工作。但有些時候,我得到的東西是這樣的:

local.oTestZone = createObject('java','org.joda.time.DateTimeZone').init('Europe/London'); 

這應與此:Constructor但是我ColdFusion中得到一個錯誤說:

無法找到類org.joda構造.time.DateTimeZone接受類型(java.lang.String)的參數。

當我做這樣的事情,雖然這工作完全正常:

local.oToZone = createObject('java','org.joda.time.DateTimeZone').forID('Europe/London'); 

其中關於比賽:forID

我失去了我的Java實現的東西嗎?

回答

4

構造函數DateTimeZone(String id)被標記爲protected(我花了3次JavaDoc來發現它),所以CF將無法調用它。

在我看來,像JodaTime期望你使用靜態方法來構造你的實例,所以你的第二個例子可能是正確的做法。

+0

啊上錯過了太多 – Jarede

2

您正在處理抽象類和受保護的構造函數。

受保護的構造函數意味着只有同一個包中的子類或類才能調用該構造函數。所以即使你提供了正確的參數,構造函數也不可用於你的代碼。

ColdFusion documentation有這些花絮:

「雖然cfobject標籤加載類,它不會創建一個實例對象只有靜態方法和字段是可訪問後馬上打電話給cfobject。」

這就是爲什麼forID有效;這是一個靜態的方法。

「要持久訪問某個對象,必須使用init函數,因爲它返回對該對象實例的引用,並且cfobject不會。」

這和以前的說法是爲什麼方法像getOffset不會在這種情況下工作。

我不是這還不夠熟悉,知道如果有,你可以實例化就可以訪問到構造,但希望別人可以附和類。

+0

好去處抽象類,我錯過了!我認爲Jarede現在調用DateTimeZone的靜態方法的方式是正確的,這就是JodaTime文檔顯示它的方式:http://joda-time.sourceforge.net/userguide.html#TimeZones - 但是我確實需要谷歌是否它是可以在抽象類中調用靜態方法,我以前從未在API中看到過。 – barnyr