问题标签 [clojure-java-interop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
clojure - 如何从 Clojure 调用 Java 类的 eval 方法?
如果某个 Java 类有一个名为“eval”的方法,我如何从 Clojure 调用它?
执行以下操作似乎从 clojure.core 调用 eval 方法,而不是 TestObject 的 eval:
serialization - 如何通过gen-class在Clojure中生成可序列化的java类?
我们需要通过 Java 序列化机制将 Clojure 生成的一堆 Java 对象序列化成一个文件。
如上,lancelot.FilterPipe 和 lancelot.SegmentorPipe 的实例需要序列化。我们发现写对象流是可以的,但是重新编译代码后读取对象流就不行了。
线程“Thread-8”中的异常 java.io.InvalidClassException: lancelot.SegmentorPipe; 本地类不兼容:流 classdesc serialVersionUID = 2583852145887230781,本地类 serialVersionUID = -2255006751011717591 at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:579) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1601) at java.io .ObjectInputStream.readClassDesc(ObjectInputStream.java:1514) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) 在 java.io.ObjectInputStream.readObject(对象输入流.java:369)
由于serialVersionUID 是静态的和最终的,但似乎gen-class 只能生成实例级别的最终字段。所以问题是我无法为生成的类设置特定的serialVersionUID。
对这个问题有什么建议吗?提前致谢。
scala - 通过 java/scala 将向量/输入流传递给 clojure 函数
我需要从 java/scala 调用一个 clojure 函数,它需要一个向量或一个输入流作为它的第一个参数。
这样做总是会产生以下异常:
执行异常[[UnsupportedOperationException: pdf (clj-pdf.main/-pdf not defined?)]]
我正在使用clj-pdf并且需要调用 pdf-function
我已经修改了源代码,通过
对 cjl-pdf 的 project.clj 的修改可以在最后 2 行看到:
在我添加的 main.clj 中:
我正在使用我的 scala 代码中的 lib,如下所示:
有没有办法解决这个问题?
clojure - 如何标记 Clojure 函数,以便我可以使用 Java 反射识别它
我需要以某种方式将某些 Clojure 函数标记为“特殊”,以便 Java 代码可以使用反射来识别它们。我试图向函数添加注释,但显然不支持。我尝试过reify
扩展接口IFn
(以便 Java 代码可以识别函数对象),但这并不好,因为 Clojure 并没有直接使用 reified 方法作为代码实现invoke
,而是间接调用Afunction
实际上是实现方法(我需要invoke
用实际的功能代码标记实际的方法)。
有任何想法吗?
编辑:即使以可以使用 ASM 库(而不是常规反射)访问的方式进行标记也可以,但我需要以某种方式标记实际AFunction
对象或invoke
方法。此外,我无法访问实际AFunction
对象——我需要标签在类上可见。
java - Clojure Java Interop - 对字段的引用......无法解决
我正在开发一个 clojure 项目,我想在 Java 中创建一个类,然后实例化该类并从我的 clojure 代码中调用一个方法。
我的 Java 代码位于 resources/MyClass.java
在我的clojure代码中,我有
我编译了我的类并运行了 lein compile,但是当我运行我的代码时,我得到了
我究竟做错了什么?看起来导入语句作为实例化有效,但我无法调用该方法。帮助表示赞赏!
谢谢
casting - 整数类型转换如何在 Java 互操作中工作?
我无法弄清楚规则。
clojure - clojure 编译器生成的字节码中的“public static {}”是什么意思?
当我在 clojure 中生成一个类时(通过gen-class),我通过javap检查得到以下定义:
我想知道构造public static {}是什么意思,因为我以前从未见过这样的东西……</p>
有人可以启发我吗?
audio - 如何连接/展平字节数组
我正在制作一个生成 .wav 文件的函数。我已经设置了标题,但我遇到了data
本身的麻烦。我有一个创建 880Hz 正弦波的函数(至少我认为它就是这样做的,但这不是我的问题)——问题是,如何将一组字节数组转换为仅包含其内容的一个字节数组? 这是我最好的尝试:
但它并没有做我想做的事:将所有字节数组连接到一个向量中,然后连接到一个单字节数组中。对我来说为什么不能这样做是有道理的:它不能连接/展平一个字节[],因为它不是向量;这是一个字节[]。而且它不能将 byte[] 转换为 byte。但是我需要做什么才能让它工作?
clojure - 是否可以将 Clojure 的案例形式与 Java 枚举一起使用?
医生case
说
与 cond 和 condp 不同,case 会进行恒定时间调度……所有形式的常量表达式在 case 中都是可以接受的。
我想从case
的恒定时间调度中受益,以匹配 Java 枚举。Java 的switch
语句适用于枚举,但在 Clojure 中执行以下操作:
结果是:IllegalArgumentException No matching clause: MILLISECONDS
不支持枚举case
吗?难道我做错了什么?我必须求助cond
还是有更好的解决方案?
java - Clojure 和 JavaFX 2——将多参数参数传递给 JavaFX 方法
很多 JavaFx 方法都采用 var args,例如 Group,在 Java 中声明为:
其他例如:
我发现了...
应该将 java 数组传递给方法的方法,所以我一直在做这样的事情,
每次有 var arg 时都必须这样做很(into-array...)
烦人,而当 var arg 是我实际传入的基类时更烦人。例如
导致类型不匹配错误。相反,我必须这样做:
所以我做了这个功能:
这对组很好,但不能解决一般问题。
那么有没有解决椭圆/可变参数问题的好方法,所以我不必为每个可变参数方法制作特殊功能?这个函数的要求是它需要你想要调用的方法(例如Group
),固定的参数,可变参数,并且不知何故,该函数会神奇地知道在可变参数中找到元素的公共基类。
谢谢