使用参数调用类构造函数

时间:2019-06-18 15:46:18

标签: velocity confluence

需要帮助将此Java代码UserNameTermQuery query = new UserNameTermQuery("*");转换为Velocity。

到目前为止尝试过

#set($query = $content.class.getConstructor('com.atlassian.user.search.query.UserNameTermQuery').newInstance("*"))

没有运气。问题是我需要在自定义宏中运行#set($usernames = $userAccessor.findUsers($query)),并且findUsers不接受字符串,但需要特定类上的Object。并且per API对象必须使用一个参数-String初始化。

虽然相应的Java代码非常简单,但我不能在自定义Confluence宏中使用它

import com.atlassian.confluence.user.UserAccessor;
import com.atlassian.user.search.query.UserNameTermQuery;
import com.atlassian.user.search.SearchResult;
import com.atlassian.user.User;

UserNameTermQuery query = new UserNameTermQuery("*");
SearchResult<User> users = userAccessor.findUsers(query);

1 个答案:

答案 0 :(得分:0)

必须在具有适当参数的适当类上调用getConstructor方法。现在,您正在$content对象的类中搜索构造函数,而不是向getConstructor提供预期参数的类。

尝试:

#set($queryClass = $content.class.forName('com.atlassian.user.search.query.UserNameTermQuery'))
#set($dummyString = 'foo')
#set($stringClass = $dummyString.class)
#set($queryConstructor = $queryClass.getConstructor($stringClass))
#set($query = $queryConstructor.newInstance('*'))

当然,您最好尝试在Java方面进行所有操作...