我正在使用twitter4j库并且遇到其中一个类的问题。在我的代码中,我得到一个函数返回的RequestToken实例。我可以将变量转储到屏幕上,看看它实际上是正确的类。它有2个自己的公共方法,我可以毫无问题地使用它,但它有6个公共方法继承自OAuthToken我无法使用。当我尝试访问其中任何一个时,Coldfusion会抛出错误:
Either there are no methods with the specified method name and argument types, or the getTokenSecret method is overloaded with argument types that ColdFusion cannot decipher reliably. ColdFusion found 0 methods that matched the provided arguments. If this is a Java object and you verified that the method exists, you may need to use the javacast function to reduce ambiguity.
一些相关代码:
<cfset twitterFactory = createObject("java", "twitter4j.TwitterFactory").init(config)>
<cfset twitter = twitterFactory.getInstance()>
<cfset RequestToken = twitter.getOAuthRequestToken()>
<cfset TokenSecret = RequestToken.getTokenSecret()>
转储RequestToken我可以在转储中看到java类名,并显示方法。
我需要使用的两个方法是getToken()和getTokenSecret()。既不采取任何论据,所以没有什么可以javacast。
使用coldfusion8,以及最新的twitter4j版本3.0.3
答案 0 :(得分:1)
一切看起来都对我来说:类和方法都是public
。 可能是一个错误。 CF使用reflection来识别和调用方法。它通常是正确的,但并非总是如此。我已经看到在旧版本中发生过一次或两次。通常使用继承方法。
如果这是问题所在,您可以自己使用反射作为解决方法:
<cfscript>
emptyArray = [];
method = RequestToken.getClass().getMethod("getTokenSecret", emptyArray);
result = method.invoke( RequestToken, emptyArray);
</cfscript>