可以安全地在ColdFusion中调用String上的底层java方法吗?

Hen*_*nry 4 coldfusion

Adobe ColdFusion基于Java构建.CFML/CFSCRIPT中的几乎所有简单变量都是java.lang.String在操作需要它为某种类型之前.

我一直想用startsWith()String,而不是更笨重CFML变种.

left(str,4) EQ "test"
Run Code Online (Sandbox Code Playgroud)

但是,在ColdFusion中使用底层Java方法的一般共识是什么?

javacast()首先对var 更安全吗?

javacast("String",x).startsWith("test");
Run Code Online (Sandbox Code Playgroud)

如果CF引擎不是基于Java构建怎么办?

谢谢

Nat*_*utz 6

是的,您可以使用Adobe ColdFusion和基于Java构建的其他CFML引擎来完成此操作.它实际上比你想象的要简单.

<cfset str = "hello what's up" />
#str.startsWith("hello")# <!--- returns "YES" --->
<cfif str.startsWith("h")>
  This text will be output
</cfif>

#str.startsWith("goodbye")# <!--- returns "NO" --->
<cfif str.startsWith("g")>
  This text will NOT be output
</cfif>
Run Code Online (Sandbox Code Playgroud)

这是可能的,因为ColdFusion中的CFML字符串与Java字符串相同.您可以在CFML字符串上使用任何本机字符串方法(Java.lang.String).

如果你还没有猜到,这也适用于CFML数组(某种列表,可能是java.util.Vector)和结构(可能是java.util.Map).试验数据类型和cfdump标签,你会发现很多秘密.

一句警告,这不是标准的CFML,因此如果您的底层引擎发生变化,包括只升级到新版本,则无法保证它仍然有效.

也就是说,string.startsWith()是Java和.NET的原生,所以如果您的CFML引擎是BlueDragon.NET,这也将起作用.它不能使用的唯一CFML引擎是ColdFusion 5和之前的版本.

使用安全吗?我会说是的.只要CFML引擎在Java或.NET上运行,它就非常安全.它没有文档,但很容易理解,所以我想说可以自由使用它.

  • 正如内森所说,这一切都没有记录.因此,如果您对风险因素不满意,使用记录的javacast()函数可能更为可取.虽然说过,String是java和C#的核心部分.因此,IMO,使用未记录的string.startsWith()比依赖于数组是Vector更安全.我可以在不久的将来看到变化. (2认同)