在Coldfusion中创建Java对象非常简单:
variable = CreateObject("JAVA", "java.object").init(JavaCast("primitiveType", cfVar));
但是,如果Java方法返回Java对象列表,那么使用Java返回类型并不是那么简单:
newVariable = variable.returnJavaObjectCollection();
是否有最佳实践用于处理在数组或ArrayCollection中返回的Java对象?
答案 0 :(得分:2)
如果我认为我理解你的问题(对不起,你不是100%清楚) - 你应该能够在ColdFusion中调用Java对象的方法,就像在Java中一样。
例如,在ColdFusion中处理String时,可以在java.lang.String对象上调用方法。
所以没有错:
<cfscript>
myString = JavaCast("string", "FooBar"); //definitely a String object.
</cfscript>
<cfoutput>
String length: #myString.length()#
Starts with 'Foo': #myString.startsWith("Foo")#
Upper case string: myString.toUpperCase()#
</cfoutput>
如果您正在处理java.util.List的实例,您会发现9/10次,ColdFusion的本机数组函数可以正常工作 - 因为ColdFusion Arrays实际上也是java.util.List的实现
所以&lt; cfloop array =“#foo#”...&gt;应该仍然可以工作,ArrayAppend(),ArrayContains()等都应该按预期工作。
如果失败,您仍然可以访问List的基础API: http://download.oracle.com/javase/6/docs/api/java/util/List.html
但要记住的是,一切都是0,而不是1的索引。
所以要获得Java List中的第一个值是:
myItem = myList.get(0);
而不是CF的方式:
myItem = myList[1];
否则,这真的是关于它的。
你应该注意到直接调用Java方法有一点点开销,因为它是使用Reflection动态完成的,所以如果你可以使用本机CF函数,那通常会更好,但是你没有其他办法,只能本地互动。
有关详细信息,您可以尝试ColdFusion Java Documentation
答案 1 :(得分:1)
如果您返回Vector<Object>
它将与ColdFusion的数组实用程序一起使用,HashMap<String,Object>
将与ColdFusion的Struct实用程序一起使用。但是有一些注意事项:
在ColdFusion中未定义null对象,因此如果数组中的元素为null,或者map中的值为null,或者您只返回null,则它们各自的变量将是未定义的。
请记住,您仍然可以在ColdFusion中的复杂Java对象上调用java方法 - 包括除Vector和Maps之外的复杂集合上的方法。例如:
<cfset iterator = myJavaObj.myJavaFuncReturnsCollection().iterator() />
<cfloop condition="iterator.hasNext()">
<cfset currObj = iterator.next() />
<cfset currObj.myFunction() />
</cfloop>