如果它们具有相同的名称,我如何调用java方法而不是新的成员函数

时间:2013-06-28 07:06:47

标签: java coldfusion overloading railo

可悲的是,它并不是简单的超载......

我正在尝试将我的应用程序从railo 3.3升级到4.1

我经常使用底层的java方法,大部分时间这都不是问题。我有一个数组,我正在使用java Comparator对象进行排序:

a.sort(
    createObject(
        "java", 
        "AlphanumComparator", 
        "/model/java/AlphanumComparator.jar"
    )
);

在3.3上运行良好。但是使用4.0中的新成员函数,会添加一个新的array.sort方法,其运行方式与arraySort()相同。

现在我收到以下错误:

invalid sort type [AlphanumComparator@someid], sort types are [text, textNoCase, numeric]

转储getClass()显示原始java方法仍然存在,但我似乎无法称之为...

1 个答案:

答案 0 :(得分:2)

我相信你在3.3中调用的.sort()方法“仅仅”是Railo的railo.runtime.type.ArrayImpl类的实现细节,而不是通用(标准)Java类。因此,无论如何都会让您面临实施可能会发生变化的风险 - 而且它已经存在。

小代码更改将允许您在那里使用java.util.Collections和静态sort()方法:

var Collections = createObject( "java", "java.util.Collections" );
Collections.sort( a, createObject( "java",
                                   "AlphanumComparator",
                                   "/model/java/AlphanumComparator.jar" ) );

我使用CFML数组字符串和默认java.text.Collator在Railo 4.0.4.001上对此进行了测试,因此我相信它也适用于您的java.util.Comparator实现。