有没有办法使用反射以编程方式创建一个类?例如。我们可以使用私有构造函数来创建一个类类型,然后可以用它来创建该类的实例吗?
我知道还有其他一些技巧,例如生成源代码并编译它,或生成字节代码并使用类加载器加载它......但我想看看是否有可能以某种方式创建java.lang的实例。直接上课。
我想在clojure中编写以下代码:
(def c (create-class "com.example.Dog" {:fields {"legs" 4}
:methods {"bark" (... do something ...)}
:constructors {.....}}))
(def d1 (.newInstance c))
(def d2 (.newInstance c))
答案 0 :(得分:4)
Clojure有几种方法可以根据你的需要生成类:Clojure types page中描述了它们虽然我发现Clojure Programming中关于类型的章节最有用,作为生成类的各种方法的比较动态。
在引擎盖下,这些生成字节码并使用类编译器(gen-class除外)加载它,该类加载器写入类文件。这个主题还有很多内容,我可以在这里讨论,非常值得查看Clojure Programming(或你最喜欢的Clojure书)中的章节