Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coldfusion CF不支持具有可变参数数和任何已知解决方法的Java构造函数吗?_Coldfusion_Coldfusion 2016_Apache Commons Io - Fatal编程技术网

Coldfusion CF不支持具有可变参数数和任何已知解决方法的Java构造函数吗?

Coldfusion CF不支持具有可变参数数和任何已知解决方法的Java构造函数吗?,coldfusion,coldfusion-2016,apache-commons-io,Coldfusion,Coldfusion 2016,Apache Commons Io,我们有一个项目,处理各种编码的文件。我正在使用跳过UTF-8字节顺序标记。现有代码可以工作,但也需要支持UTF-16变体。最直接的方法是将多个ByteOrderMarker传递给BOMInputStream构造函数 根据文件 BOMInputStream bomIn = new BOMInputStream(in, ByteOrderMark.UTF_16LE, ByteO

我们有一个项目,处理各种编码的文件。我正在使用跳过UTF-8字节顺序标记。现有代码可以工作,但也需要支持UTF-16变体。最直接的方法是将多个ByteOrderMarker传递给BOMInputStream构造函数

根据文件

BOMInputStream bomIn = new BOMInputStream(in,
                               ByteOrderMark.UTF_16LE,
                               ByteOrderMark.UTF_16BE,
                               ByteOrderMark.UTF_32LE,
                               ByteOrderMark.UTF_32BE);
构造函数签名使用:

但是,当我尝试使用以下代码调用此构造函数时

<cfset var fis = createObject("java", "java.io.FileInputStream").init(arguments.filePath) />
<cfset var boms = createObject("java", "org.apache.commons.io.ByteOrderMark") />
<cfset var bomins = createObject("java", "org.apache.commons.io.input.BOMInputStream").init(fis, boms.UTF_8, boms.UTF_16LE, boms.UTF_16BE) />

我也只尝试了一个BOM参数,得到了相同的错误,错误中的参数更少。因此,CF似乎无法使用无限参数调用Java构造函数。这是正确的吗?如果是的话,是否有任何已知的解决方法?

当然,当我发布一个想法的时候。看起来这些变量是通过被调用的Java对象中的数组访问的。我只是更改了CF代码,以传递一个BOM数组,而不是单个参数,它按预期工作

<cfset var bomins = createObject("java", "org.apache.commons.io.input.BOMInputStream").init(
    fis, 
    [boms.UTF_8, boms.UTF_16LE, boms.UTF_16BE]
) />


是的,看起来像。事实上,这也是它在Java中的工作原理@亚历克斯:没错。我的意思是,很明显,CF缺少合成糖层,只支持平面阵列。我猜这会在识别方法签名时产生歧义。“当然,我发布想法的那一刻就想到了。”这个网站不就是这样工作的吗?:)
Unable to find a constructor for class org.apache.commons.io.input.BOMInputStream that accepts parameters of type ( java.io.FileInputStream, org.apache.commons.io.ByteOrderMark, org.apache.commons.io.ByteOrderMark, org.apache.commons.io.ByteOrderMark ).
<cfset var bomins = createObject("java", "org.apache.commons.io.input.BOMInputStream").init(
    fis, 
    [boms.UTF_8, boms.UTF_16LE, boms.UTF_16BE]
) />