CF 是否不支持参数数量可变的 Java 构造函数和任何已知的解决方法?
Does CF not support Java constructors with variable number of arguments and any known workarounds?
我们有一个项目处理各种编码的文件。我正在使用 BOMInputStream 跳过 UTF-8 字节顺序标记。现有代码可以工作,但还需要支持 UTF-16 变体。最直接的方法是将多个 ByteOrderMarkers 传递给 BOMInputStream 构造函数。
根据文档...
BOMInputStream bomIn = new BOMInputStream(in,
ByteOrderMark.UTF_16LE,
ByteOrderMark.UTF_16BE,
ByteOrderMark.UTF_32LE,
ByteOrderMark.UTF_32BE);
构造函数签名使用variable arguments:
public BOMInputStream(InputStream delegate,
ByteOrderMark... boms)
但是,当我尝试使用以下代码调用此构造函数时
<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) />
我收到以下错误...
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 ).
我也只尝试了一个 BOM 参数,得到了相同的错误,但错误中的参数较少。因此,CF 似乎无法使用无限参数调用 Java 构造函数。这是否正确?如果正确,是否有任何已知的解决方法?
当然,当我 post 想到一个主意的时候。看起来这些变量是通过正在调用的 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]
) />
我们有一个项目处理各种编码的文件。我正在使用 BOMInputStream 跳过 UTF-8 字节顺序标记。现有代码可以工作,但还需要支持 UTF-16 变体。最直接的方法是将多个 ByteOrderMarkers 传递给 BOMInputStream 构造函数。
根据文档...
BOMInputStream bomIn = new BOMInputStream(in,
ByteOrderMark.UTF_16LE,
ByteOrderMark.UTF_16BE,
ByteOrderMark.UTF_32LE,
ByteOrderMark.UTF_32BE);
构造函数签名使用variable arguments:
public BOMInputStream(InputStream delegate,
ByteOrderMark... boms)
但是,当我尝试使用以下代码调用此构造函数时
<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) />
我收到以下错误...
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 ).
我也只尝试了一个 BOM 参数,得到了相同的错误,但错误中的参数较少。因此,CF 似乎无法使用无限参数调用 Java 构造函数。这是否正确?如果正确,是否有任何已知的解决方法?
当然,当我 post 想到一个主意的时候。看起来这些变量是通过正在调用的 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]
) />