0

我目前正在使用 jodatime Java 库,并在尝试在 Coldfusion 中使用它时遇到问题。

我已经下载了最新的 jodatime 2.1 版本,将 jar 文件放入本地驱动器上的一个文件夹中,并让我的 Coldfusion 管理员在Java 和 JVM设置页面下的ColdFusion 类路径中查看该文件夹。

在大多数情况下,它都有效。但有时我会得到这样的东西:

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

哪个应该与此匹配:构造函数但是我在coldfusion中得到一个错误说:

找不到接受类型 ( java.lang.String ) 参数的类 org.joda.time.DateTimeZone 的构造函数。

当我做这样的事情时它工作得很好:

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

匹配项:forID

我的java实现是否遗漏了什么?

4

2 回答 2

4

构造DateTimeZone(String id)函数被标记为受保护(我花了 3 次阅读 JavaDoc 才发现它),因此 CF 将无法调用它。

在我看来,JodaTime 希望您使用其中一种静态方法来构造您的实例,因此您的第二个示例可能是正确的做法。

于 2012-11-12T11:30:56.830 回答
2

您正在处理一个抽象类和一个受保护的构造函数。

受保护的构造函数意味着只有同一包中的子类或类才能调用该构造函数。因此,即使您提供了正确的参数,构造函数也不适用于您的代码。

ColdFusion 文档有这些花絮:

“虽然 cfobject 标签加载了类,但它并没有创建实例对象。只有静态方法和字段可以在调用 cfobject 后立即访问。”

这就是为什么forID有效;这是一种静态方法。

“要持久访问对象,您必须使用 init 函数,因为它返回对对象实例的引用,而 cfobject 不会。”

这和前面的陈述是为什么像这样的方法getOffset在这种情况下不起作用的原因。

我对此不够熟悉,不知道是否有一个可以实例化的类可以让你访问构造函数,但希望其他人可以加入。

于 2012-11-12T11:34:15.137 回答