我正在使用实现自己的Array类的JDBC库。为了使用所述Array,他们将其转换为Object []。
我正在使用Clojure,无法弄清楚如何将该类转换为Java Array。
(vec (.getArray results "array-row"))
Unable to convert: class com.github.housepower.jdbc.ClickHouseArray to Object[]
答案 0 :(得分:0)
难道Java代码不是在调用.getArray
方法,然后将结果转换为Object[]
数组吗?查看com.github.housepower.jdbc.ClickHouseArray
的来源,似乎是通过java.sql.Array
扩展了com.github.housepower.jdbc.wrapper.SQLArray
,而Object[]
不是*e
。对吧?
Clojure只会执行运行时反射来解析对象上的方法,因此您无需担心强制转换。除了您收到的例外情况之外,可能还有其他信息吗?尝试使用export async function displayDialogAsync (dialogUrl: string): Promise<void> {
return new Promise<void>(resolve => {
const dialogClosed = async (_: any): Promise<void> => {
// do whatever you need when the dialog is closed
resolve();
};
Office.context.ui.displayDialogAsync(url, dialogOptions, (result: Office.AsyncResult) => {
dialog = result.value;
dialog.addEventHandler(Office.EventType.DialogEventReceived, dialogClosed);
});
});
}
来获取REPL中的最后一个异常。如果您可以发布更完整的测试案例,那么我们可能会更好地解决问题?
答案 1 :(得分:0)
我相信您可以尝试迭代该数组并手动组合结果:
(let [array (.getArray results "array-row")]
(for [item array]
(turn-item-into-a-map item)))
或者也许只是
(mapv turn-item-into-a-map jdbc-array)
如果您不想转换项目,请使用identity
函数。
即使这样的数组不支持迭代,您仍然可以通过循环/递归中的索引来访问其项:
(let [array (get-jdbc-array...)
size (.count array)]
(loop [i 0
result []]
(if (= i size)
result
(let [item (.get array i)]
(recur (inc i) (conj result item))))))