在 Java 接口上调用 .class 时将 .class 传递给 Clojure 函数

per*_*kss 1 java clojure clojure-java-interop

我需要将 Java 接口的 .class 传递给 Clojure 中的函数调用。

调用 (class ) 需要对象的实例,因为我想要静态类名。

基本上所以我可以java互操作和使用: keysetHandle.getPrimitive(Aead.class);

Java Source 方法调用

调用 .class 的接口

传递 Aead 但 Aead 只是一个接口想要它像这样但无法解决如何在 Clojure 中获得等效的 Aead.class?

(.getPrimitive 键集句柄 Aead.class)

Tay*_*ood 5

你试过(.getPrimitive keyset-handle Aead)吗?

您应该能够仅通过使用其名称来传递接口的类。一个示例 Java 类:

public class Foo {
    public <P> String bar(Class<P> klass) {
        return klass.getCanonicalName();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在 REPL 中,使用java.util.List接口例如:

user=> (import Foo)
Foo
user=> (.bar (Foo.) java.util.List)
"java.util.List"
Run Code Online (Sandbox Code Playgroud)