相关疑难解决方法(0)

Clojure:从String类名创建新实例

在Clojure中,给定一个类名作为字符串,我需要创建一个新的类实例.换句话说,我如何在中实现new-instance-from-class-name

(def my-class-name "org.myorg.pkg.Foo")
; calls constructor of org.myorg.pkg.Foo with arguments 1, 2 and 3
(new-instance-from-class-name  my-class-name 1 2 3) 
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个更优雅的解决方案

  • 从类中构造函数调用Java newInstance方法
  • 使用eval,load-string,...

在实践中,我将在使用defrecord创建的类上使用它.因此,如果该场景有任何特殊语法,我会非常感兴趣.

constructor clojure

17
推荐指数
1
解决办法
3373
查看次数

在Clojure中动态访问Java字段?

我是clojure和java的新手.

为了访问Clojure中的Java字段,您可以:

Classname/staticField
Run Code Online (Sandbox Code Playgroud)

这是一样的

(. Classname staticField)
Run Code Online (Sandbox Code Playgroud)

(如我错了请纠正我)

当变量中保存的字段名称时,如何访问静态字段?即:

(let [key-stroke 'VK_L
      key-event KeyEvent/key-stroke])
Run Code Online (Sandbox Code Playgroud)

我想key-stroke在尝试访问该字段之前将其评估为符号VK_L.

interop clojure

7
推荐指数
3
解决办法
1238
查看次数

使用Java Reflection,如何获取指定构造函数args的派生类的类的构造函数?

使用Java反射,可以获得构造函数getConstructor(klass, args).

但是,当我们作为args构造函数签名中指定的类的派生类传递时,它将失败.如何克服这个问题?

例如,

HashSet.class.getConstructor(new Class[]{ HashSet.class });
Run Code Online (Sandbox Code Playgroud)

失败.而

HashSet.class.getConstructor(new Class[]{ Collection.class });
Run Code Online (Sandbox Code Playgroud)

成功.

我正在寻找可以轻松使用的东西clojure.因此,我更喜欢开箱即用,而不必添加用户定义的功能.

任何想法,如何解决这个问题?

java reflection clojure

5
推荐指数
3
解决办法
2133
查看次数

Clojure:如何在函数内创建记录?

在clojure中,我想在函数内创建一个记录.

我试过了:

(defn foo []
  (defrecord MyRecord [a b])
  (let [b (MyRecord. "1" "2")]))
Run Code Online (Sandbox Code Playgroud)

但它会导致异常:

java.lang.IllegalArgumentException: Unable to resolve classname: MyRecord
Run Code Online (Sandbox Code Playgroud)

任何的想法?

clojure

2
推荐指数
1
解决办法
693
查看次数

标签 统计

clojure ×4

constructor ×1

interop ×1

java ×1

reflection ×1