Gre*_*ams 3 java static interop field clojure
我在做一些我认为简单的事情时遇到了一件莫名其妙的事情.我的classpath上有一个JAR文件.我在Emacs中,使用SLIME REPL,我正在尝试访问Java类实例的静态字段(JAR中的一个).
这是我的班级:
public class MainFrame extends JFrame implements WindowListener,
TreeSelectionListener {
JPanel panel;
InfocardWindow infoWindow;
InfocardBuilder infocardBuilder;
Main infomlFile;
static NotecardModel setupModel;
...
Run Code Online (Sandbox Code Playgroud)
当我尝试:
infwb.cardmaker> (import 'javax.swing.JFrame)
javax.swing.JFrame
infwb.cardmaker> (import 'org.infoml.infocardOrganizer.MainFrame)
org.infoml.infocardOrganizer.MainFrame
infwb.cardmaker> MainFrame/setupModel
; Evaluation aborted.
Run Code Online (Sandbox Code Playgroud)
错误消息是:
Unable to find static field: setupModel in class org.infoml.infocardOrganizer.MainFrame
[Thrown class java.lang.Exception]
Run Code Online (Sandbox Code Playgroud)
我尝试切换到一个更简单的问题:访问非静态字段.我在一个内部做了let,以消除从REPL执行此操作可能是问题的根源的可能性:
infwb.cardmaker> (let [mainFr (MainFrame.)]
(println (.panel mainFr)))
; Evaluation aborted.
Run Code Online (Sandbox Code Playgroud)
错误消息是:
No matching field found: panel for class org.infoml.infocardOrganizer.MainFrame
[Thrown class java.lang.IllegalArgumentException]
Run Code Online (Sandbox Code Playgroud)
当取代(.panel mainFr)和(println (. mainFr panel)在体内时,我得到了相同的结果let.此外,将REPL切换到命名空间时无需更改user.(当然,这些都是摇摇欲坠的鸡巫巫绝望之举.)
谷歌查询像'emacs slime clojure无法访问Java类字段错误"无法找到静态字段"'没有任何用处 - 大多数都与尝试调用Java类方法(不访问Java类字段)有关.
为了彻底,我试过:
user> (let [mainFr (MainFrame.)]
MainFrame/setupModel)
; Evaluation aborted.
Run Code Online (Sandbox Code Playgroud)
错误消息和以前一样:
Unable to find static field: setupModel in class org.infoml.infocardOrganizer.MainFrame
[Thrown class java.lang.Exception]
Run Code Online (Sandbox Code Playgroud)
底线:给定一个MainFrame实例,我需要做什么才能访问静态或非静态字段?感谢您提供的任何帮助或提示.
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |