问题标签 [gen-class]

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.

0 投票
1 回答
674 浏览

macros - 使用 gen-class 的 clojure 宏不会创建注释

我正在尝试编写一个 clojure 宏,用于在编译时生成多个 Java 类。我发现当我在宏之外调用 gen-class 时,我可以向类添加注释。但是,当我尝试在宏中使用 gen-class 时,编译的类没有注释。

我把我的问题归结为这个例子:

当我编译这个文件时,它会创建一个 Test1.class 和 Test2.class - 我用 Eclipse 检查两者,发现 Test1 有类级别和方法级别的 @Deprecated 注释,但 Test2.class 没有注释。当我使用宏扩展时,看起来好像我的 Test2.class 应该被注释:

我在这里做错了什么?

0 投票
1 回答
173 浏览

clojure - 如何将方法列表传递给 gen-class?

当使用gen-class这个编译罚款:

但如果你这样做:

你得到这个错误:

CompilerException java.lang.RuntimeException: Unable to resolve symbol: hello in this context, 编译:(clj\sandbox.clj:3:17)

有没有办法解决这个错误?我希望能够传入:methods值而不是内联定义它。


如果它很重要,这是我用来生成它的 pom.xml:

0 投票
1 回答
388 浏览

static - 是否可以使用 clojure 的 gen-class 宏来生成具有静态字段的类?

可以使用 Clojure 的 gen-class 宏生成以下类吗?

如果不是,为什么不呢?

0 投票
2 回答
550 浏览

java - Clojure - 如何使用 deftype 定义公共可变成员?

我一直在尝试让http://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm在 clojure 中运行。

我发现通过省略@FXMLjava 版本中的注释并将内容公开,来自:

到:

...当我单击按钮时它基本上仍然有效,并且 fxml 能够到达控制器的public Text actiontarget,其访问通常只能通过@FXML注释启用。

所以我试图让我的基于 clojure 的控制器类具有公共可变字段,但是在过去几个小时通过 :gen-class 和 deftypes 寻找时,我找不到让它工作的方法。我能够final从 java 测试代码访问(默认)deftype 字段,但我看到的唯一在线讨论说你不能有公共和可变字段,并尝试 :gen-class。好吧,我在 gen-class 中也找不到,而且我能找到的所有 gen-class 示例都仅使用 clojure 中的类字段;我不确定如何在 :gen-class 中定义 :state 以便可以从 java 访问它,而且我不知道如何使这些可变和公开。

我的下一件事是尝试 clojure 注释,然后使用 fx:script 字段而不是 fx:controller 来定义 clojure 回调......但我想确保它首先使用 deftype 或 gen-class 是可行/不可行的。

那么有人可以告诉我是否可以在 clojure 中创建一个具有公共可变字段的 Java 可访问类?

谢谢。

0 投票
1 回答
773 浏览

clojure - gen-class 可以覆盖受保护的 Java 方法吗?

我正在尝试使用 Clojure 中的 Swing,我对此感到困惑gen-class,我无法从文档中判断这是否应该工作 -paintComponent是一个受保护的方法JPanel,我可以覆盖它,但是当我尝试调用暴露的超类的方法,我得到java.lang.IllegalArgumentException: No matching method found: parentPaintComponent for class project.PicturePanel. 谁能澄清为什么我似乎无法使用这种方法?

0 投票
2 回答
118 浏览

clojure - Clojure 是否有效地内联原始操作?

假设我有以下 Clojure 代码:

gen-class 会产生相当于编译以下 java 代码的字节码:

或者换句话说,我可以使用 Clojure 作为一种非常方便的 DSL 来生成高效的动态字节码吗?

编辑:

好的,我做了一些测试来说明我的问题:

这是java版本:

这会产生输出:耗时:39200

clojure“等效”:

这会产生:“经过的时间:121242.902 毫秒”

这慢了 3 倍。

现在我改写的问题是:我如何构造/提示 clojure 代码,以便避免代码中的函数调用,这实际上是原始数学运算?

编辑2:

我更改了测试,因此它使用未经检查的原始数学运算符:

“经过的时间:64386.187 毫秒”所以它几乎是 Java 版本的 2 倍,但仍然是 Java 版本的 1.6 倍。

0 投票
1 回答
147 浏览

clojure - clojure gen-class 生成的类调用问题

我定义了以下 MyCache.clj

我使用 (compile 'abcd.MyCache) 成功编译了上述文件。

当我尝试使用生成的类时,如下所示..我收到错误。请帮忙。

0 投票
1 回答
1748 浏览

clojure - Clojure 使用 gen-class 的多个构造函数

如何在 clojure 中使用 gen-class 定义多个构造函数和状态?我看不到使用 :init、:state 和 :constructors 的单值映射的方法。

0 投票
0 回答
200 浏览

serialization - Clojure:如何在编译时创建 Java 对象,而不是在加载时或运行时

我正在使用带有 Clojure 的 java 库。java 库只需要在编译时创建一个对象。通过 uberjar(使用 leiningen 创建)部署应用程序时,无法正确创建此配置对象而不会出现错误。

我可以通过宏在仅编译时创建对象。问题是它不可序列化。当应用程序通过 uberjar 运行时,如何使 jvm 可以使用此对象?将对象放入原子中不起作用,因为原子在加载时/运行时为运行 jar 的新 jvm 实例重置。编译时 jvm 需要一种方法将此对象放入其中一个 aot 编译类中。(gen-class) 似乎不起作用,因为它只能在运行时通过初始化程序初始化状态。

0 投票
3 回答
519 浏览

java - Gen-Class 不生成 .class 文件

我想在 Java 中使用 Clojure 代码。Clojure 代码本身应该实现一个 Java 接口 ( TestGenClassInterface)。

我的 project.clj 是:

Java 接口如下所示:

Clojure 代码是:

我预计,lein compile在 eclipse+CounterClockwise 中运行或“作为 Clojure 应用程序运行”之后,TestGenClass.class会生成一个 .class 文件(名为 )并保存在其中*compile-path*(此处为:target/classes/com/stackoverflow/clojure/)。不幸的是,事实并非如此。

添加:aot :all到我的 project.clj 时,我得到以下堆栈跟踪: